pwrite04.c revision 1e6f5a673655551de5734ff31ef48cd63b604e6d
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 173c65815c35c71c576b98e800a03d5cb24ef27683robbiew * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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; 7356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak int lc; /* loop counter */ 7456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak char *msg; /* message returned from parse_opts */ 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++) { 2343c65815c35c71c576b98e800a03d5cb24ef27683robbiew wbuf[i] = (char *)malloc(K1); 2353c65815c35c71c576b98e800a03d5cb24ef27683robbiew if (wbuf[i] == NULL) { 236cff4af016805c764c391c473d4c95b999dcdf148vapier tst_resm(TBROK, "ib: malloc failed: errno=%d", errno); 2373c65815c35c71c576b98e800a03d5cb24ef27683robbiew tst_exit(); 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) { 253cff4af016805c764c391c473d4c95b999dcdf148vapier tst_resm(TFAIL, "(%ld = lseek(%d, %ld, %d)) != %ld) errno = %d", 25456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak offloc, fdesc, offset, whence, checkoff, errno); 2553c65815c35c71c576b98e800a03d5cb24ef27683robbiew tst_exit(); 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 */ 269814e03cb08b7706002c63b7a6fe0e6e228fe3e01subrata_modakvoid cleanup() 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 2792c28215423293e443469a07ae7011135d058b671Garrett Cooper}