ppoll01.c revision fc7a2a57faa26636ed7a5551daf80bb79be0490e
1beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 2beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Copyright (c) Crackerjack Project., 2007-2008 ,Hitachi, Ltd */ 3beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Author(s): Takahiro Yasui <takahiro.yasui.mp@hitachi.com>, */ 4beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Yumiko Sugita <yumiko.sugita.yf@hitachi.com>, */ 5beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp> */ 6beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 7beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* This program is free software; you can redistribute it and/or modify */ 8beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* it under the terms of the GNU General Public License as published by */ 9beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* the Free Software Foundation; either version 2 of the License, or */ 10beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* (at your option) any later version. */ 11beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 12beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* This program is distributed in the hope that it will be useful, */ 13beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ 14beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ 15beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* the GNU General Public License for more details. */ 16beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 17beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* You should have received a copy of the GNU General Public License */ 18beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* along with this program; if not, write to the Free Software */ 19beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ 20beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 21beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 22beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 23beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 24beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* File: ppoll01.c */ 25beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 26beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Description: This tests the ppoll01() syscall */ 27beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 28beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 29beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 30beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 31beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 32beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 33beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Usage: <for command-line> */ 34beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* ppoll01 [-c n] [-e][-i n] [-I x] [-p x] [-t] */ 35beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* where, -c n : Run n copies concurrently. */ 36beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* -e : Turn on errno logging. */ 37beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* -i n : Execute test n times. */ 38beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* -I x : Execute test for x seconds. */ 39beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* -P x : Pause for x seconds between iterations. */ 40beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* -t : Turn on syscall timing. */ 41beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 42beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Total Tests: 1 */ 43beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 44beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Test Name: ppoll01 */ 45beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* History: Porting from Crackerjack to LTP is done by */ 46beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Manas Kumar Nayak maknayak@in.ibm.com> */ 47beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 482f765066f7902ba75b75574efdcc72b5eec38b50yaberauneya#ifndef _GNU_SOURCE 492f765066f7902ba75b75574efdcc72b5eec38b50yaberauneya#define _GNU_SOURCE 502f765066f7902ba75b75574efdcc72b5eec38b50yaberauneya#endif 512f765066f7902ba75b75574efdcc72b5eec38b50yaberauneya 52beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <sys/syscall.h> 53beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <sys/types.h> 54beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <sys/select.h> 55beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <sys/wait.h> 56beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <getopt.h> 57beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <string.h> 58beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <stdlib.h> 59beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <errno.h> 60beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <stdio.h> 61beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <unistd.h> 62beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <fcntl.h> 63beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <libgen.h> 64beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <limits.h> 65beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include <signal.h> 662f765066f7902ba75b75574efdcc72b5eec38b50yaberauneya#include <poll.h> 67beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 68beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include "../utils/include_j_h.h" 69beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include "../utils/common_j_h.c" 70beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 71beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Harness Specific Include Files. */ 722f765066f7902ba75b75574efdcc72b5eec38b50yaberauneya#include "ltp_signal.h" 73beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include "test.h" 74beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include "usctest.h" 75beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#include "linux_syscall_numbers.h" 76beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 77fc7a2a57faa26636ed7a5551daf80bb79be0490eyaberauneya/* Older versions of glibc don't publish this constant's value. */ 78fc7a2a57faa26636ed7a5551daf80bb79be0490eyaberauneya#ifndef POLLRDHUP 79fc7a2a57faa26636ed7a5551daf80bb79be0490eyaberauneya#define POLLRDHUP 0x2000 80fc7a2a57faa26636ed7a5551daf80bb79be0490eyaberauneya#endif 81fc7a2a57faa26636ed7a5551daf80bb79be0490eyaberauneya 82beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Extern Global Variables */ 83ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyaextern int Tst_count; /* counter for tst_xxx routines. */ 84ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyaextern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ 85beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 86beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Global Variables */ 87ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyachar *TCID = "ppoll01"; /* Test program identifier.*/ 88ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyaint testno; 89ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyaint TST_TOTAL = 1; /* total number of tests in this file. */ 90beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 91beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Extern Global Functions */ 92beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 93beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 94beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Function: cleanup */ 95beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 96beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Description: Performs all one time clean up for this test on successful */ 97beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* completion, premature exit or failure. Closes all temporary */ 98beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* files, removes all temporary directories exits the test with */ 99beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* appropriate return code by calling tst_exit() function. */ 100beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 101beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Input: None. */ 102beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 103beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Output: None. */ 104beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 105beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Return: On failure - Exits calling tst_exit(). Non '0' return code. */ 106beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* On success - Exits calling tst_exit(). With '0' return code. */ 107beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 108beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 109beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modakextern void cleanup() { 110ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* Remove tmp dir and all files in it */ 111ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST_CLEANUP; 112ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_rmdir(); 113beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 114ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* Exit with appropriate return code. */ 115ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_exit(); 116beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak} 117beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 118ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyavoid sighandler(int sig); /* signals handler function for the test */ 119d07b595975578fe08e424d9875cb69ae5daf9f07subrata_modak 120beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Local Functions */ 121beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 122beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 123beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Function: setup */ 124beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 125beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Description: Performs all one time setup for this test. This function is */ 126beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* typically used to capture signals, create temporary dirs */ 127beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* and temporary files that may be used in the course of this */ 128beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* test. */ 129beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 130beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Input: None. */ 131beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 132beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Output: None. */ 133beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 134beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Return: On failure - Exits by calling cleanup(). */ 135beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* On success - returns 0. */ 136beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* */ 137beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/******************************************************************************/ 138beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modakvoid setup() { 139ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* Capture signals if any */ 140d07b595975578fe08e424d9875cb69ae5daf9f07subrata_modak signal(SIGINT, &sighandler); 141d07b595975578fe08e424d9875cb69ae5daf9f07subrata_modak 142ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* Create temporary directories */ 143ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST_PAUSE; 144ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_tmpdir(); 145beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak} 146beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 147beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* 148beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * Macros 149beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 150beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#define SYSCALL_NAME "ppoll" 151beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 152beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* 153beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * Global variables 154beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 155beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 156beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modakenum test_type { 157beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak NORMAL, 158ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya MASK_SIGNAL, 159ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TIMEOUT, 160ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya FD_ALREADY_CLOSED, 161ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya SEND_SIGINT, 162ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya SEND_SIGINT_RACE_TEST, 163ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya INVALID_NFDS, 164ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya INVALID_FDS, 165ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya MINUS_NSEC, 166ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TOO_LARGE_NSEC, 167beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak}; 168beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 169beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* 170beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * Data Structure 171beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 172beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modakstruct test_case { 173beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak short expect_revents; 174ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int ttype; 175ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int ret; 176ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int err; 177beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak}; 178beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 179beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* Test cases 180beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * 181beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * test status of errors on man page 182beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * 183beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * EBADF can't check because EBADF never happen even though 184beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * fd was invalid. In this case, information of invalid 185beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * fd is set in revents 186beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * EFAULT v ('fds' array in the invalid address space) 187beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * EINTR v (a non blocked signal was caught) 188beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * EINVAL v ('nfds' is over the 'RLIMIT_NOFILE' value) 189beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * ENOMEM can't check because it's difficult to create no-memory 190beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 191beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 192beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modakstatic struct test_case tcase[] = { 193ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case00 194ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = NORMAL, 195ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .expect_revents = POLLIN | POLLOUT, 196ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = 0, 197ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = 0, 198ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 199ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case01 200ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = MASK_SIGNAL, 201ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .expect_revents = 0, // don't care 202ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = 0, 203ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = 0, 204ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 205ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case02 206ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = TIMEOUT, 207ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .expect_revents = 0, // don't care 208ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = 0, 209ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = 0, 210ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 211ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case03 212ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = FD_ALREADY_CLOSED, 213ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .expect_revents = POLLNVAL, 214ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = 0, .err = 0, 215ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 216ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case04 217ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = SEND_SIGINT, 218ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = -1, 219ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = EINTR, 220ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 221ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case05 222ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = SEND_SIGINT_RACE_TEST, 223ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = -1, 224ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = EINTR, 225ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 226ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case06 227ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = INVALID_NFDS, 228ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = -1, 229ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = EINVAL, 230ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 231ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case07 232ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = INVALID_FDS, 233ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = -1, 234ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = EFAULT, }, 235beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#if 0 236ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case08 237ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = MINUS_NSEC, 238ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = -1, 239ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = EINVAL, // RHEL4U1 + 2.6.18 returns SUCCESS 240ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 241ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya { // case09 242ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ttype = TOO_LARGE_NSEC, 243ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .ret = -1, 244ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya .err = EINVAL, // RHEL4U1 + 2.6.18 returns SUCCESS 245ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }, 246beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#endif 247ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya }; 248beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 249beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak#define NUM_TEST_FDS 1 250beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 251beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* 252beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * do_test() 253beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * 254beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * Input : TestCase Data 255beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * Return : RESULT_OK(0), RESULT_NG(1) 256beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * 257beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 258beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 259ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyastatic int do_test(struct test_case *tc) { 260ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int sys_ret, sys_errno; 261ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int result = RESULT_OK; 262ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int fd = -1, cmp_ok = 1; 263beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak char fpath[PATH_MAX]; 264beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak struct pollfd *p_fds, fds[NUM_TEST_FDS]; 265ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya unsigned int nfds = NUM_TEST_FDS; 266ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya struct timespec *p_ts, ts; 267ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigset_t *p_sigmask, sigmask; 268ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya pid_t pid = 0; 269ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 270ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(fd = setup_file(".", "test.file", fpath)); 271ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (fd < 0) 272ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya return 1; 273ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya fds[0].fd = fd; 274ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya fds[0].events = POLLIN | POLLPRI | POLLOUT | POLLRDHUP; 275ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya fds[0].revents = 0; 276ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_fds = fds; 277ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_ts = NULL; 278ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_sigmask = NULL; 279beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 280beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak switch (tc->ttype) { 281ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case TIMEOUT: 282ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya nfds = 0; 283ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_sec = 0; 284ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_nsec = 50000000; // 50msec 285ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_ts = &ts; 286ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 287beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak case FD_ALREADY_CLOSED: 288ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(close(fd)); 289ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya fd = -1; 290ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(cleanup_file(fpath)); 291ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 292ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case MASK_SIGNAL: 293ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(sigemptyset(&sigmask)); 294ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(sigaddset(&sigmask, SIGINT)); 295ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_sigmask = &sigmask; 296ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya nfds = 0; 297ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_sec = 0; 298ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_nsec = 300000000; // 300msec => need to be enough for 299ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya // waiting the signal 300ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_ts = &ts; 301ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya // fallthrough 302beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak case SEND_SIGINT: 303ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya nfds = 0; 304ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya pid = create_sig_proc(100000, SIGINT, UINT_MAX); // 100msec 305ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (pid < 0) 306ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya return 1; 307ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 308ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case SEND_SIGINT_RACE_TEST: 309ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* block the INT signal */ 310ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigemptyset(&sigmask); 311ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigaddset(&sigmask, SIGINT); 312ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigprocmask(SIG_SETMASK, &sigmask, NULL); 313ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 314ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* and let it be unblocked when the syscall runs */ 315ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigemptyset(&sigmask); 316ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_sigmask = &sigmask; 317ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya nfds = 0; 318ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_sec = 0; 319ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_nsec = 300000000; // 300msec => need to be enough for 320ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya // waiting the signal 321ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_ts = &ts; 322ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya nfds = 0; 323ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya pid = create_sig_proc(0, SIGINT, 1); 324ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (pid < 0) { 325ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya result = 1; 326ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya goto cleanup; 327ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 328ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 329ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case INVALID_NFDS: 330ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya //nfds = RLIMIT_NOFILE + 1; //==> RHEL4U1 + 2.6.18 returns SUCCESS 331ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya nfds = -1; 332ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 333ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case INVALID_FDS: 334ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_fds = (void*) 0xc0000000; 335ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 336ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case MINUS_NSEC: 337ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_sec = 0; 338ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_nsec = -1; 339ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_ts = &ts; 340ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 341beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak case TOO_LARGE_NSEC: 342ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_sec = 0; 343ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ts.tv_nsec = 1000000000; 344ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya p_ts = &ts; 345ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 346ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 347beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 348beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak /* 349ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya * Execute system call 350ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya */ 351ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya errno = 0; 352ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(sys_ret = syscall(__NR_ppoll, p_fds, nfds, p_ts, p_sigmask, SIGSETSIZE)); 353ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sys_errno = errno; 354ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (sys_ret <= 0 || tc->ret < 0) 355ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya goto TEST_END; 356ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 357ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya cmp_ok = fds[0].revents == tc->expect_revents; 358ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TINFO, "EXPECT: revents=0x%04x", tc->expect_revents); 359ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TINFO, "RESULT: revents=0x%04x", fds[0].revents); 360ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 361ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST_END: 362ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* 363ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya * Check results 364ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya */ 365ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (tc->ttype == SEND_SIGINT_RACE_TEST) { 366ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int sig; 367ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigprocmask(SIG_SETMASK, NULL, &sigmask); 368ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya for (sig = 1; sig < SIGRTMAX; sig++) { 369ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST(sigismember(&sigmask, sig)); 370ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (TEST_RETURN < 0 && TEST_ERRNO == EINVAL && sig != SIGINT) 371ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya continue; /* let's ignore errors if they are for other signal than SIGINT that we set */ 372ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if ((sig == SIGINT) != (TEST_RETURN != 0)) { 373ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TFAIL, "Bad value of signal mask, signal %d is %s", 374ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sig, TEST_RETURN ? "on" : "off"); 375ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya cmp_ok |= 1; 376ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 377ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 378ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 379ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya result |= (sys_errno != tc->err) || !cmp_ok; 380ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya PRINT_RESULT_CMP(sys_ret >= 0, tc->ret, tc->err, sys_ret, sys_errno, cmp_ok); 381ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya cleanup: if (fd >= 0) 382ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya cleanup_file(fpath); 383ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 384ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigemptyset(&sigmask); 385ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya sigprocmask(SIG_SETMASK, &sigmask, NULL); 386ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (pid > 0) { 387ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int st; 388ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya kill(pid, SIGTERM); 389ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya wait(&st); 390ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 391beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak return result; 392beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak} 393beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 394beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* 395beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * sighandler() 396beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 397ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneyavoid sighandler(int sig) { 398ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if (sig == SIGINT) 399ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya return; 400ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya // NOTREACHED 401ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya return; 402beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak} 403beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 404beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak/* 405beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak * main() 406beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak */ 407beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 408beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modakint main(int ac, char **av) { 409beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak int result = RESULT_OK; 410ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int i; 411ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int lc; /* loop counter */ 412ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya char *msg; /* message returned from parse_opts */ 413ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 414ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* parse standard options */ 415ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya if ((msg = parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL) { 416ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); 417ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 418ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 419ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya setup(); 420ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 421ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* Check looping state if -i option given */ 422ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya for (lc = 0; TEST_LOOPING(lc); ++lc) { 423ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya Tst_count = 0; 424ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya for (testno = 0; testno < TST_TOTAL; ++testno) { 425ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* 426ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya * Execute test 427ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya */ 428ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya for (i = 0; i < (int) (sizeof(tcase) / sizeof(tcase[0])); i++) { 429ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya int ret; 430ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TINFO, "(case%02d) START", i); 431ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya ret = do_test(&tcase[i]); 432ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TINFO, "(case%02d) END => %s", i, (ret == 0) ? "OK" 433ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya : "NG"); 434ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya TEST_ERROR_LOG(TEST_ERRNO); 435ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya result |= ret; 436ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 437ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 438ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya /* 439ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya * Check results 440ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya */ 441ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya switch (result) { 442ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya case RESULT_OK: 443ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TPASS, "ppoll01 call succeeded "); 444ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 445ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya 446ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya default: 447ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya tst_resm(TFAIL | TTERRNO, "%s failed", TCID); 448ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya RPRINTF("NG"); 449beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak cleanup(); 450ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya break; 451ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 452beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 453ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 454ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya } 455ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya cleanup(); 456ea695e4a871cdcc17c92495d148b0f842784e7e2yaberauneya return 0; 457beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak} 458beedd5d3a2e0250ed53eec2acefa91a5ddebcffbsubrata_modak 459