rename14.c revision d6d11d08678aac1ed2c370ea8e42e5f45aea07be
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> 41d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <wait.h> 42d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <sys/types.h> 43d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <sys/stat.h> 44d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include <fcntl.h> 45d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 46d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/** LTP Port **/ 47d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#include "test.h" 48d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 49d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define FAILED 0 50d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define PASSED 1 51d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 52d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint local_flag = PASSED; 53d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 54fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "rename14"; 55fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubisint TST_TOTAL = 1; 56d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/**************/ 57d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 58d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define RUNTIME 45 59d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 60d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint kidpid[2]; 61d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint parent_pid; 62d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 63c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingerint main(int argc, char *argv[]) 64d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 6548f20313857f6afce9317e83d98d9ee536d2377dsubrata_modak int pid; 66d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigset_t set; 67d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew struct sigaction act, oact; 6856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak int term(); 6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak int al(); 70d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew void dochild1(); 71d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew void dochild2(); 72d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 73d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 74d34d581c6a320e356a6cda923c7aa399479e812crobbiew 75d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(argc, argv, NULL, NULL); 76d34d581c6a320e356a6cda923c7aa399479e812crobbiew 77d34d581c6a320e356a6cda923c7aa399479e812crobbiew maybe_run_child(&dochild1, "n", 1); 78d34d581c6a320e356a6cda923c7aa399479e812crobbiew maybe_run_child(&dochild2, "n", 2); 79d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 80d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigemptyset(&set); 8156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak act.sa_handler = (void (*)())term; 82d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_mask = set; 83d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_flags = 0; 84d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (sigaction(SIGTERM, &act, &oact)) { 85526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "Sigaction(SIGTERM)"); 86d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 87d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 88d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigemptyset(&set); 8956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak act.sa_handler = (void (*)())al; 90d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_mask = set; 91d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_flags = 0; 92d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (sigaction(SIGALRM, &act, 0)) { 93526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "Sigaction(SIGALRM)"); 944bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak } 95d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew parent_pid = getpid(); 96d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_tmpdir(); 97d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/*--------------------------------------------------------------*/ 98d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 99d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 100d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid < 0) { 101526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "fork() returned %d", pid); 102d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 103d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid == 0) { 104d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 105d34d581c6a320e356a6cda923c7aa399479e812crobbiew if (self_exec(argv[0], "n", 1) < 0) { 10656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak tst_resm(TBROK, "self_exec failed"); 107d34d581c6a320e356a6cda923c7aa399479e812crobbiew } 108d34d581c6a320e356a6cda923c7aa399479e812crobbiew#else 109d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew dochild1(); 110d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 111d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 112d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kidpid[0] = pid; 113d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 114d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid < 0) { 115d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (void)kill(kidpid[0], SIGTERM); 116d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (void)unlink("./rename14"); 117526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TBROK, NULL, "fork() returned %d", pid); 118d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 119d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid == 0) { 120d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 121d34d581c6a320e356a6cda923c7aa399479e812crobbiew if (self_exec(argv[0], "n", 1) < 0) { 12256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak tst_resm(TBROK, "self_exec failed"); 123d34d581c6a320e356a6cda923c7aa399479e812crobbiew } 124d34d581c6a320e356a6cda923c7aa399479e812crobbiew#else 125d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew dochild2(); 126d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 127d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 128d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kidpid[1] = pid; 129d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 130d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew alarm(RUNTIME); 131d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 132d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew /* Collect child processes. */ 1339e9306f7282497eed0715ec64f1f3dcbb1c8a00fmreed /* Wait for timeout */ 1349e9306f7282497eed0715ec64f1f3dcbb1c8a00fmreed pause(); 1354bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak 136d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kill(kidpid[0], SIGTERM); 137d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kill(kidpid[1], SIGTERM); 138d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 1398bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak waitpid(kidpid[0], NULL, 0); 1408bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak waitpid(kidpid[1], NULL, 0); 1418bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak 142d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14"); 143d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14xyz"); 14456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak (local_flag == PASSED) ? tst_resm(TPASS, "Test Passed") 14556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak : tst_resm(TFAIL, "Test Failed"); 146d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 147d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_rmdir(); 14853740500924f6439623a8ac256b5be2d6c59ed1fGarrett Cooper tst_exit(); 149d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 15056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 151d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/* FUNCTIONS GO HERE */ 152d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 153c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingerint term(void) 154d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 155d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (parent_pid != getpid()) 156d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew exit(0); 157d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[0]) 15856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[0], SIGTERM)); 159d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[1]) 16056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[1], SIGTERM)); 16156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return 0; 162d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 163d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 164c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingerint al(void) 165d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 166d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[0]) 16756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[0], SIGTERM)); 168d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[1]) 16956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return (kill(kidpid[1], SIGTERM)); 17056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak return 0; 171d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 172d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 173c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid dochild1(void) 174d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 175d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew int fd; 176d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 177d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew for (;;) { 178d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew fd = creat("./rename14", 0666); 179d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14"); 180d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew close(fd); 181d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 182d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 183d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 184c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid dochild2(void) 185d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 186d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew for (;;) { 187d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew rename("./rename14", "./rename14xyz"); 188d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 189ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 190