pwrite04.c revision 526fdf8d8ea3b43b73de7cc25eb754f12702c8d2
13c65815c35c71c576b98e800a03d5cb24ef27683robbiew/*
23c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
33c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   Copyright (c) International Business Machines  Corp., 2002
43c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
53c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   This program is free software;  you can redistribute it and/or modify
63c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   it under the terms of the GNU General Public License as published by
73c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   the Free Software Foundation; either version 2 of the License, or
83c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   (at your option) any later version.
93c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
103c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   This program is distributed in the hope that it will be useful,
113c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
123c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
133c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   the GNU General Public License for more details.
143c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
153c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   You should have received a copy of the GNU General Public License
163c65815c35c71c576b98e800a03d5cb24ef27683robbiew *   along with this program;  if not, write to the Free Software
174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
183c65815c35c71c576b98e800a03d5cb24ef27683robbiew */
193c65815c35c71c576b98e800a03d5cb24ef27683robbiew
203c65815c35c71c576b98e800a03d5cb24ef27683robbiew/*
213c65815c35c71c576b98e800a03d5cb24ef27683robbiew * NAME
223c65815c35c71c576b98e800a03d5cb24ef27683robbiew *      pwrite04.c (ported from SPIE, section2/filesuite/pread_pwrite.c,
233c65815c35c71c576b98e800a03d5cb24ef27683robbiew *      	        by Airong Zhang)
243c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
253c65815c35c71c576b98e800a03d5cb24ef27683robbiew * TEST SUMMARY
263c65815c35c71c576b98e800a03d5cb24ef27683robbiew *	Test the pwrite() system call with O_APPEND.
273c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
283c65815c35c71c576b98e800a03d5cb24ef27683robbiew * USAGE
294bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak *  	pwrite04
303c65815c35c71c576b98e800a03d5cb24ef27683robbiew *
313c65815c35c71c576b98e800a03d5cb24ef27683robbiew */
323c65815c35c71c576b98e800a03d5cb24ef27683robbiew
333c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define _XOPEN_SOURCE 500
343c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <stdio.h>
353c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <sys/types.h>
363c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <sys/stat.h>
373c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <unistd.h>
383c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <sys/fcntl.h>
393c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <memory.h>
403c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include <errno.h>
413c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include "usctest.h"
423c65815c35c71c576b98e800a03d5cb24ef27683robbiew#include "test.h"
433c65815c35c71c576b98e800a03d5cb24ef27683robbiew
443c65815c35c71c576b98e800a03d5cb24ef27683robbiewchar *TCID = "pwrite04";
453c65815c35c71c576b98e800a03d5cb24ef27683robbiewint TST_TOTAL = 1;
4656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint local_flag;
473c65815c35c71c576b98e800a03d5cb24ef27683robbiew
483c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define PASSED 1
493c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define FAILED 0
503c65815c35c71c576b98e800a03d5cb24ef27683robbiew
5156207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint block_cnt = 0;
523c65815c35c71c576b98e800a03d5cb24ef27683robbiew
533c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define K1    		1024
543c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define K2    		(K1 * 2)
553c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define K3    		(K1 * 3)
563c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define K4    		(K1 * 4)
573c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define K5    		(K1 * 5)
583c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define	NBUFS 		4
593c65815c35c71c576b98e800a03d5cb24ef27683robbiew#define DATA_FILE	"pwrite04_file"
603c65815c35c71c576b98e800a03d5cb24ef27683robbiew
613c65815c35c71c576b98e800a03d5cb24ef27683robbiewchar name[256], fname[256];
623c65815c35c71c576b98e800a03d5cb24ef27683robbiew
6356207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid init_buffers(char *[]);
643c65815c35c71c576b98e800a03d5cb24ef27683robbiewvoid l_seek(int, off_t, int, off_t);
6524fc21390fe719f9f71d6e3bd707fce4f0826164subrata_modakstatic void cleanup(void);
663c65815c35c71c576b98e800a03d5cb24ef27683robbiew
674bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint main(int ac, char *av[])
683c65815c35c71c576b98e800a03d5cb24ef27683robbiew{
6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	int fd;
7056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	int nbytes;
7156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	char *wbuf[NBUFS];
7256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	struct stat statbuf;
7389af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis	int lc;
740b9589f3f9c0345b29cfcf7da5a1253c708303ebCyril Hrubis	const char *msg;
753c65815c35c71c576b98e800a03d5cb24ef27683robbiew
763c65815c35c71c576b98e800a03d5cb24ef27683robbiew	strcpy(name, DATA_FILE);
773c65815c35c71c576b98e800a03d5cb24ef27683robbiew	sprintf(fname, "%s.%d", name, getpid());
783c65815c35c71c576b98e800a03d5cb24ef27683robbiew
7956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	/*
8056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	 * parse standard options
8156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	 */
8245e285d46ab47b0ff76c88acb5ba97b0bd5f753dGarrett Cooper	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) {
8356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		tst_resm(TBROK, "OPTION PARSING ERROR - %s", msg);
842c28215423293e443469a07ae7011135d058b671Garrett Cooper
8556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	}
863c65815c35c71c576b98e800a03d5cb24ef27683robbiew	tst_tmpdir();
873c65815c35c71c576b98e800a03d5cb24ef27683robbiew	for (lc = 0; TEST_LOOPING(lc); lc++) {
883c65815c35c71c576b98e800a03d5cb24ef27683robbiew
893c65815c35c71c576b98e800a03d5cb24ef27683robbiew		init_buffers(wbuf);
903c65815c35c71c576b98e800a03d5cb24ef27683robbiew		local_flag = PASSED;
913c65815c35c71c576b98e800a03d5cb24ef27683robbiew
923c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if ((fd = open(fname, O_RDWR | O_CREAT, 0666)) < 0) {
9356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TBROK, "open failed: fname = %s, errno = %d",
9456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 fname, errno);
9556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			cleanup();
9656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		}
9756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
9856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * pwrite() K1 of data (0's) at offset 0.
9956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
10056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		if ((nbytes = pwrite(fd, wbuf[0], K1, 0)) != K1) {
10156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL,
10256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 "pwrite at 0 failed: nbytes=%d, errno=%d",
10356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 nbytes, errno);
10456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			cleanup();
10556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		}
10656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
10756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
10856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * We should still be at offset 0.
10956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
11056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		l_seek(fd, 0, SEEK_CUR, 0);
11156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
11256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
11356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * lseek() to a non K boundary, just to be different.
11456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
11556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		l_seek(fd, K1 / 2, SEEK_SET, K1 / 2);
11656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
11756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
11856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * pwrite() K1 of data (2's) at offset K2.
11956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
12056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		if ((nbytes = pwrite(fd, wbuf[2], K1, K2)) != K1) {
12156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL,
12256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 "pwrite at K2 failed: nbytes=%d, errno=%d",
12356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 nbytes, errno);
12456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			cleanup();
12556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		}
12656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
12756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
12856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * We should still be at our non K boundary.
12956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
13056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		l_seek(fd, 0, SEEK_CUR, K1 / 2);
13156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
13256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
13356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * lseek() to an offset of K3.
13456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
13556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		l_seek(fd, K3, SEEK_SET, K3);
13656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
13756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
13856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * This time use a normal write() of K1 of data (3's) which should
13956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * take place at an offset of K3, moving the file pointer to K4.
14056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
14156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		if ((nbytes = write(fd, wbuf[3], K1)) != K1) {
14256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL, "write failed: nbytes=%d, errno=%d",
14356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 nbytes, errno);
14456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			cleanup();
14556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		}
14656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
14756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
14856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * We should be at offset K4.
14956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
15056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		l_seek(fd, 0, SEEK_CUR, K4);
15156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
15256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		/*
15356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 * pwrite() K1 of data (1's) at offset K1.
15456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 */
15556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		if ((nbytes = pwrite(fd, wbuf[1], K1, K1)) != K1) {
15656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL, "pwrite failed: nbytes=%d, errno=%d",
15756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 nbytes, errno);
15856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			cleanup();
15956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		}
1603c65815c35c71c576b98e800a03d5cb24ef27683robbiew
1613c65815c35c71c576b98e800a03d5cb24ef27683robbiew	/*--------------------------------------------------------------*/
1623c65815c35c71c576b98e800a03d5cb24ef27683robbiew
1633c65815c35c71c576b98e800a03d5cb24ef27683robbiew		/*
1643c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * Now test that O_APPEND takes precedence over any
1653c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * offset specified by pwrite(), but that the file
1663c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * pointer remains unchanged.  First, close then reopen
1673c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * the file and ensure it is already K4 in length and
1683c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * set the file pointer to it's midpoint, K2.
1693c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 */
1703c65815c35c71c576b98e800a03d5cb24ef27683robbiew		close(fd);
1713c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if ((fd = open(fname, O_RDWR | O_APPEND, 0666)) < 0) {
172cff4af016805c764c391c473d4c95b999dcdf148vapier			tst_resm(TBROK, "open failed: fname = %s, errno = %d",
17356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 fname, errno);
174814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak			cleanup();
1753c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
1763c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if (fstat(fd, &statbuf) == -1) {
177cff4af016805c764c391c473d4c95b999dcdf148vapier			tst_resm(TFAIL, "fstat failed: errno = %d", errno);
178814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak			cleanup();
1793c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
1803c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if (statbuf.st_size != K4) {
18156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL, "file size is %ld != K4",
18256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 statbuf.st_size);
183814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak			cleanup();
1843c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
1853c65815c35c71c576b98e800a03d5cb24ef27683robbiew		l_seek(fd, K2, SEEK_SET, K2);
1863c65815c35c71c576b98e800a03d5cb24ef27683robbiew
1873c65815c35c71c576b98e800a03d5cb24ef27683robbiew		/*
1883c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * Finally, pwrite() some K1 of data at offset 0.
1893c65815c35c71c576b98e800a03d5cb24ef27683robbiew		 * What we should end up with is:
19056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 *      -The file pointer should still be at K2.
19156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 *      -The data should have been written to the end
19256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		 *       of the file (O_APPEND) and should be K5 in size.
193bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak		 */
1943c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if ((nbytes = pwrite(fd, wbuf[0], K1, 0)) != K1) {
19556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL,
19656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 "pwrite at 0 failed: nbytes=%d, errno=%d",
19756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 nbytes, errno);
1982c28215423293e443469a07ae7011135d058b671Garrett Cooper
1993c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
2003c65815c35c71c576b98e800a03d5cb24ef27683robbiew		l_seek(fd, 0, SEEK_CUR, K2);
2013c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if (fstat(fd, &statbuf) == -1) {
202cff4af016805c764c391c473d4c95b999dcdf148vapier			tst_resm(TFAIL, "fstat failed: errno = %d", errno);
2032c28215423293e443469a07ae7011135d058b671Garrett Cooper
2043c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
2053c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if (statbuf.st_size != K5) {
20656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			tst_resm(TFAIL, "file size is %ld != K4",
20756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				 statbuf.st_size);
2082c28215423293e443469a07ae7011135d058b671Garrett Cooper
2093c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
21056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		tst_resm(TPASS, "O_APPEND test passed.");
2113c65815c35c71c576b98e800a03d5cb24ef27683robbiew
2123c65815c35c71c576b98e800a03d5cb24ef27683robbiew	/*------------------------------------------------------------------------*/
2133c65815c35c71c576b98e800a03d5cb24ef27683robbiew
2143c65815c35c71c576b98e800a03d5cb24ef27683robbiew		close(fd);
2153c65815c35c71c576b98e800a03d5cb24ef27683robbiew		unlink(fname);
21656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	}			/* end for */
217814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	cleanup();
2181e6f5a673655551de5734ff31ef48cd63b604e6dGarrett Cooper	tst_exit();
2192c28215423293e443469a07ae7011135d058b671Garrett Cooper
2203c65815c35c71c576b98e800a03d5cb24ef27683robbiew}
2213c65815c35c71c576b98e800a03d5cb24ef27683robbiew
2223c65815c35c71c576b98e800a03d5cb24ef27683robbiew/*------------------------------------------------------------------------*/
2233c65815c35c71c576b98e800a03d5cb24ef27683robbiew
2243c65815c35c71c576b98e800a03d5cb24ef27683robbiew/*
2253c65815c35c71c576b98e800a03d5cb24ef27683robbiew * init_buffers() allocates wbuf[] array
2263c65815c35c71c576b98e800a03d5cb24ef27683robbiew * as follows:
2273c65815c35c71c576b98e800a03d5cb24ef27683robbiew * wbuf[0] has 0's, wbuf[1] has 1's, wbuf[2] has 2's, and wbuf[3] has 3's.
2283c65815c35c71c576b98e800a03d5cb24ef27683robbiew */
2293c65815c35c71c576b98e800a03d5cb24ef27683robbiewvoid init_buffers(char *wbuf[])
2303c65815c35c71c576b98e800a03d5cb24ef27683robbiew{
2314bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	int i;
2323c65815c35c71c576b98e800a03d5cb24ef27683robbiew
23356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	for (i = 0; i < NBUFS; i++) {
234d218f348c12b42a78fa0306d9a033bfa4f67238bCyril Hrubis		wbuf[i] = malloc(K1);
2353c65815c35c71c576b98e800a03d5cb24ef27683robbiew		if (wbuf[i] == NULL) {
236526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis			tst_brkm(TBROK, NULL, "ib: malloc failed: errno=%d",
237526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis				 errno);
2383c65815c35c71c576b98e800a03d5cb24ef27683robbiew		}
2393c65815c35c71c576b98e800a03d5cb24ef27683robbiew		memset(wbuf[i], i, K1);
2403c65815c35c71c576b98e800a03d5cb24ef27683robbiew	}
2413c65815c35c71c576b98e800a03d5cb24ef27683robbiew}
2423c65815c35c71c576b98e800a03d5cb24ef27683robbiew
2433c65815c35c71c576b98e800a03d5cb24ef27683robbiew/*
2443c65815c35c71c576b98e800a03d5cb24ef27683robbiew * l_seek() is a local front end to lseek().
2453c65815c35c71c576b98e800a03d5cb24ef27683robbiew * "checkoff" is the offset at which we believe we should be at.
2463c65815c35c71c576b98e800a03d5cb24ef27683robbiew * Used to validate pwrite doesn't move the offset.
2473c65815c35c71c576b98e800a03d5cb24ef27683robbiew */
24856207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid l_seek(int fdesc, off_t offset, int whence, off_t checkoff)
2493c65815c35c71c576b98e800a03d5cb24ef27683robbiew{
2503c65815c35c71c576b98e800a03d5cb24ef27683robbiew	off_t offloc;
2513c65815c35c71c576b98e800a03d5cb24ef27683robbiew
2523c65815c35c71c576b98e800a03d5cb24ef27683robbiew	if ((offloc = lseek(fdesc, offset, whence)) != checkoff) {
253526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis		tst_brkm(TFAIL, NULL,
254526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis			 "(%ld = lseek(%d, %ld, %d)) != %ld) errno = %d",
25556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			 offloc, fdesc, offset, whence, checkoff, errno);
2563c65815c35c71c576b98e800a03d5cb24ef27683robbiew	}
2573c65815c35c71c576b98e800a03d5cb24ef27683robbiew}
2583c65815c35c71c576b98e800a03d5cb24ef27683robbiew
259814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak/*
260814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak * cleanup() - Performs all ONE TIME cleanup for this test at
261814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *             completion or premature exit.
262814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *
263814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *	Print test timing stats and errno log if test executed with options.
264814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *	Close the testfile if still opened.
265814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *	Remove temporary directory and sub-directories/files under it
266814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *	created during setup().
267814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak *	Exit the test program with normal exit code.
268814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak */
269c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void)
270814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak{
271814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	/*
272814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	 * print timing stats if that option was specified.
273814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	 * print errno log if that option was specified.
274814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	 */
275814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	TEST_CLEANUP;
276814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak
277814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak	tst_rmdir();
278814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modak
279ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
280