1d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/* 2d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 3d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * Copyright (c) International Business Machines Corp., 2002 4d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 5d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * This program is free software; you can redistribute it and/or modify 6d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * it under the terms of the GNU General Public License as published by 7d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * the Free Software Foundation; either version 2 of the License, or 8d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * (at your option) any later version. 9d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 10d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * This program is distributed in the hope that it will be useful, 11d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * but WITHOUT ANY WARRANTY; without even the implied warranty of 12d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * the GNU General Public License for more details. 14d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 15d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * You should have received a copy of the GNU General Public License 16d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 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 18d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew */ 19d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 20d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/* 11/12/2002 Port to LTP robbiew@us.ibm.com */ 21d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */ 22d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 23d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/* 24d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * NAME 25d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * rename14.c - create and rename files 26d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 27d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * CALLS 28d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * create, unlink, rename 29d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 30d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * ALGORITHM 31d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * Creates two processes. One creates and unlinks a file. 32d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * The other renames that file. 33d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * 34d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew */ 35d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 36bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak#include <stdio.h> 37a70576c4834d89f937e46698fef4114736cce4d7robbiew#include <errno.h> 38d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <signal.h> 39d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <stdlib.h> 40d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <unistd.h> 41249f40545ff10418724fcd8cfa1e10b892725f38Steven Jackson#include <sys/wait.h> 42d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <sys/types.h> 43d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <sys/stat.h> 44d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <fcntl.h> 45d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 46d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include "test.h" 47d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 48d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define FAILED 0 49d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define PASSED 1 50d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 51d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint local_flag = PASSED; 52d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 53fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "rename14"; 54fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubisint TST_TOTAL = 1; 55d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 56d567dd125fb97aae00dee54c368c2886823366beCyril Hrubis#define RUNTIME 5 57d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 58d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint kidpid[2]; 59d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint parent_pid; 60d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 61db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubisint term(void); 62db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubisint al(void); 63db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubisvoid dochild1(void); 64db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubisvoid dochild2(void); 65db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis 66c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingerint main(int argc, char *argv[]) 67d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 6848f20313857f6afce9317e83d98d9ee536d2377dsubrata_modak int pid; 69d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigset_t set; 70d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew struct sigaction act, oact; 71d34d581c6a320e356a6cda923c7aa399479e812crobbiew 72d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(argc, argv, NULL, NULL); 73d34d581c6a320e356a6cda923c7aa399479e812crobbiew 74d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigemptyset(&set); 7556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak act.sa_handler = (void (*)())term; 76d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_mask = set; 77d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_flags = 0; 78d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (sigaction(SIGTERM, &act, &oact)) { 79526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "Sigaction(SIGTERM)"); 80d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 81d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 82d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigemptyset(&set); 8356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak act.sa_handler = (void (*)())al; 84d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_mask = set; 85d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_flags = 0; 86d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (sigaction(SIGALRM, &act, 0)) { 87526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "Sigaction(SIGALRM)"); 884bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak } 89d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew parent_pid = getpid(); 90d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_tmpdir(); 91d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 92d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 93db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis if (pid < 0) 94526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "fork() returned %d", pid); 95db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis if (pid == 0) 96d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew dochild1(); 97db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis 98d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kidpid[0] = pid; 99d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 100d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid < 0) { 101d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (void)kill(kidpid[0], SIGTERM); 102d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (void)unlink("./rename14"); 103526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "fork() returned %d", pid); 104d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 105db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis if (pid == 0) 106d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew dochild2(); 107db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis 108d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kidpid[1] = pid; 109d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 110d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew alarm(RUNTIME); 111d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 112d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew /* Collect child processes. */ 1139e9306f7282497eed0715ec64f1f3dcbb1c8a00fmreed /* Wait for timeout */ 1149e9306f7282497eed0715ec64f1f3dcbb1c8a00fmreed pause(); 1154bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak 116d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kill(kidpid[0], SIGTERM); 117d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kill(kidpid[1], SIGTERM); 118d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 1198bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak waitpid(kidpid[0], NULL, 0); 1208bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak waitpid(kidpid[1], NULL, 0); 1218bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak 122d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14"); 123d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14xyz"); 12456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak (local_flag == PASSED) ? tst_resm(TPASS, "Test Passed") 12556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak : tst_resm(TFAIL, "Test Failed"); 126d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 127d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_rmdir(); 12853740500924f6439623a8ac256b5be2d6c59ed1fGarrett Cooper tst_exit(); 129d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 13056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 131c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingerint term(void) 132d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 133d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (parent_pid != getpid()) 134d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew exit(0); 135d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[0]) 13656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[0], SIGTERM)); 137d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[1]) 13856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[1], SIGTERM)); 13956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return 0; 140d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 141d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 142c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingerint al(void) 143d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 144d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[0]) 14556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[0], SIGTERM)); 146d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[1]) 14756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[1], SIGTERM)); 14856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return 0; 149d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 150d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 151c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid dochild1(void) 152d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 153d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew int fd; 154d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 155d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew for (;;) { 156d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew fd = creat("./rename14", 0666); 157d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14"); 158d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew close(fd); 159d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 160d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 161d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 162c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid dochild2(void) 163d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 164db08a151325057eb28c3cfeff0f400545f673e83Cyril Hrubis for (;;) 165d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew rename("./rename14", "./rename14xyz"); 166ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 167