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