rename14.c revision bdbaec51a423e715c2b03ed9e497e9a1fba6103e
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 17d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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#include "usctest.h" 49d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 50d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define FAILED 0 51d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define PASSED 1 52d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 53d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint local_flag = PASSED; 54d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 55d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewchar *TCID="rename14"; /* Test program identifier. */ 56d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint TST_TOTAL=1; /* Total number of test cases. */ 57d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewextern int Tst_count; /* Test Case counter for tst_* routines */ 58d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/**************/ 59d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 60d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 61d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew#define RUNTIME 45 62d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 63d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint kidpid[2]; 64d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint parent_pid; 65d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 66d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 67d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint main (argc, argv) 68d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew int argc; 69d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew char *argv[]; 70d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 7148f20313857f6afce9317e83d98d9ee536d2377dsubrata_modak int pid; 72d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigset_t set; 73d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew struct sigaction act, oact; 74d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew int term(); 75d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew int al(); 76d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew void dochild1(); 77d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew void dochild2(); 78d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 79d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 80d34d581c6a320e356a6cda923c7aa399479e812crobbiew char *msg; /* message returned from parse_opts */ 81d34d581c6a320e356a6cda923c7aa399479e812crobbiew 82d34d581c6a320e356a6cda923c7aa399479e812crobbiew /* Parse standard options given to run the test. */ 83d34d581c6a320e356a6cda923c7aa399479e812crobbiew msg = parse_opts(argc, argv, (option_t *)NULL, NULL); 84d34d581c6a320e356a6cda923c7aa399479e812crobbiew if (msg != (char *)NULL) { 85d34d581c6a320e356a6cda923c7aa399479e812crobbiew tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); 86d34d581c6a320e356a6cda923c7aa399479e812crobbiew } 87d34d581c6a320e356a6cda923c7aa399479e812crobbiew 88d34d581c6a320e356a6cda923c7aa399479e812crobbiew maybe_run_child(&dochild1, "n", 1); 89d34d581c6a320e356a6cda923c7aa399479e812crobbiew maybe_run_child(&dochild2, "n", 2); 90d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 91d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigemptyset(&set); 92d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_handler = (void(*)())term; 93d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_mask = set; 94d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_flags = 0; 95d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (sigaction(SIGTERM, &act, &oact)) { 96d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_resm(TBROK,"Sigaction(SIGTERM)"); 97d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_exit(); 98d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 99d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 100d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew sigemptyset(&set); 101d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_handler = (void(*)())al; 102d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_mask = set; 103d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew act.sa_flags = 0; 104d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (sigaction(SIGALRM, &act, 0)) { 105d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_resm(TBROK,"Sigaction(SIGALRM)"); 106d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_exit(); 1074bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak } 108d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew parent_pid = getpid(); 109d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_tmpdir(); 110d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/*--------------------------------------------------------------*/ 111d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 112d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 113d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid < 0) { 114cff4af016805c764c391c473d4c95b999dcdf148vapier tst_resm(TBROK,"fork() returned %d", pid); 115bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak tst_exit(); 116d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 117d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid == 0) { 118d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 119d34d581c6a320e356a6cda923c7aa399479e812crobbiew if (self_exec(argv[0], "n", 1) < 0) { 120d34d581c6a320e356a6cda923c7aa399479e812crobbiew tst_resm(TBROK,"self_exec failed"); 121d34d581c6a320e356a6cda923c7aa399479e812crobbiew } 122d34d581c6a320e356a6cda923c7aa399479e812crobbiew#else 123d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew dochild1(); 124d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 125d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 126d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kidpid[0] = pid; 127d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 128d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid < 0) { 129d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (void)kill(kidpid[0], SIGTERM); 130d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (void)unlink("./rename14"); 131cff4af016805c764c391c473d4c95b999dcdf148vapier tst_resm(TBROK,"fork() returned %d", pid); 132bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak tst_exit(); 133d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 134d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (pid == 0) { 135d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 136d34d581c6a320e356a6cda923c7aa399479e812crobbiew if (self_exec(argv[0], "n", 1) < 0) { 137d34d581c6a320e356a6cda923c7aa399479e812crobbiew tst_resm(TBROK,"self_exec failed"); 138d34d581c6a320e356a6cda923c7aa399479e812crobbiew } 139d34d581c6a320e356a6cda923c7aa399479e812crobbiew#else 140d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew dochild2(); 141d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 142d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 143d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kidpid[1] = pid; 144d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 145d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew alarm(RUNTIME); 146d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 147d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew /* Collect child processes. */ 1489e9306f7282497eed0715ec64f1f3dcbb1c8a00fmreed /* Wait for timeout */ 1499e9306f7282497eed0715ec64f1f3dcbb1c8a00fmreed pause(); 1504bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak 151d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kill(kidpid[0], SIGTERM); 152d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew kill(kidpid[1], SIGTERM); 153d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 1548bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak waitpid(kidpid[0], NULL, 0); 1558bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak waitpid(kidpid[1], NULL, 0); 1568bf4e9675d5b930d91c090acd1acdb2ec7da4c4fsubrata_modak 157d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14"); 158d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14xyz"); 159d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew (local_flag == PASSED) ? 160d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_resm(TPASS, "Test Passed") 161d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew : tst_resm(TFAIL, "Test Failed"); 162d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 163d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_rmdir(); 164d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/*--------------------------------------------------------------*/ 165d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew tst_exit(); /* THIS CALL DOES NOT RETURN - EXITS!! */ 166d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/*--------------------------------------------------------------*/ 16743337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak return 0; 168d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 169d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew/* FUNCTIONS GO HERE */ 170d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 171d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint term() 172d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 173d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (parent_pid != getpid()) 174d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew exit(0); 175d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[0]) 176d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew return(kill(kidpid[0], SIGTERM)); 177d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[1]) 178d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew return(kill(kidpid[1], SIGTERM)); 17943337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak return 0; 180d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 181d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 182d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewint al() 183d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 184d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[0]) 185d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew return(kill(kidpid[0], SIGTERM)); 186d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew if (kidpid[1]) 187d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew return(kill(kidpid[1], SIGTERM)); 18843337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak return 0; 189d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 190d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 191d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewvoid dochild1() 192d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 193d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew int fd; 194d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 195d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew for (;;) { 196d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew fd = creat("./rename14", 0666); 197d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew unlink("./rename14"); 198d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew close(fd); 199d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 200d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 201d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew 202d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiewvoid dochild2() 203d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew{ 204d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew for (;;) { 205d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew rename("./rename14", "./rename14xyz"); 206d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew } 207d6c7b1f84e7fba6d494b9a48c4f9ea54b6da1471robbiew} 208