16e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
26e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Copyright (c) Crackerjack Project., 2007                                   */
36e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
46e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* This program is free software;  you can redistribute it and/or modify      */
56e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* it under the terms of the GNU General Public License as published by       */
66e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* the Free Software Foundation; either version 2 of the License, or          */
76e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* (at your option) any later version.                                        */
86e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
96e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* This program is distributed in the hope that it will be useful,            */
106e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
116e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  */
126e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* the GNU General Public License for more details.                           */
136e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
146e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* You should have received a copy of the GNU General Public License          */
156e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* along with this program;  if not, write to the Free Software               */
164548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
176e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
186e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
196e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
206e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
216e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* File:        newuname01.c                                           */
226e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
236e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Description: This tests the newuname() syscall                      */
246e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
256e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Usage:  <for command-line>                                                 */
266e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* newuname01 [-c n] [-e][-i n] [-I x] [-p x] [-t]                     */
276e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*      where,  -c n : Run n copies concurrently.                             */
286e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              -e   : Turn on errno logging.                                 */
296e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              -i n : Execute test n times.                                  */
306e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              -I x : Execute test for x seconds.                            */
316e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              -P x : Pause for x seconds between iterations.                */
326e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              -t   : Turn on syscall timing.                                */
336e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
346e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Total Tests: 1                                                             */
356e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
366e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Test Name:   newuname01                                             */
376e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* History:     Porting from Crackerjack to LTP is done by                    */
386e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
396e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
406e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include <unistd.h>
416e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include <sys/utsname.h>
426e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include <errno.h>
436e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include <stdio.h>
446e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include <sys/stat.h>
456e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include <stdlib.h>
466e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
476e05831f23c0bfbad280f36d90684210a86f3630subrata_modak#include "test.h"
48817d8095fbfe5ebe22b29f58b7483f3d8d5e3fccRichard Palethorpe#include "lapi/syscalls.h"
496e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
50fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "newuname01";
51354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint testno;
52fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubisint TST_TOTAL = 1;
536e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
546e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Extern Global Functions */
556e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
566e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
576e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Function:    cleanup                                                       */
586e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
596e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Description: Performs all one time clean up for this test on successful    */
606e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              completion,  premature exit or  failure. Closes all temporary */
616e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              files, removes all temporary directories exits the test with  */
626e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              appropriate return code by calling tst_exit() function.       */
636e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
646e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Input:       None.                                                         */
656e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
666e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Output:      None.                                                         */
676e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
686e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Return:      On failure - Exits calling tst_exit(). Non '0' return code.   */
696e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              On success - Exits calling tst_exit(). With '0' return code.  */
706e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
716e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
72c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void)
73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
742c28215423293e443469a07ae7011135d058b671Garrett Cooper
75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	tst_rmdir();
766e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
77354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	tst_exit();
786e05831f23c0bfbad280f36d90684210a86f3630subrata_modak}
796e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
806e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Local  Functions */
816e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
826e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
836e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Function:    setup                                                         */
846e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
856e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Description: Performs all one time setup for this test. This function is   */
866e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              typically used to capture signals, create temporary dirs      */
876e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              and temporary files that may be used in the course of this    */
886e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              test.                                                         */
896e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
906e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Input:       None.                                                         */
916e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
926e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Output:      None.                                                         */
936e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
946e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/* Return:      On failure - Exits by calling cleanup().                      */
956e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*              On success - returns 0.                                       */
966e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/*                                                                            */
976e05831f23c0bfbad280f36d90684210a86f3630subrata_modak/******************************************************************************/
98c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid setup(void)
99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/* Capture signals if any */
101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/* Create temporary directories */
102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	TEST_PAUSE;
103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	tst_tmpdir();
1046e05831f23c0bfbad280f36d90684210a86f3630subrata_modak}
1056e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint main(int ac, char **av)
107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	struct utsname name;
10989af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis	int lc;
1102c28215423293e443469a07ae7011135d058b671Garrett Cooper
111d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis	tst_parse_opts(ac, av, NULL, NULL);
1126e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	setup();
1146e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (lc = 0; TEST_LOOPING(lc); ++lc) {
116d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang		tst_count = 0;
117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		for (testno = 0; testno < TST_TOTAL; ++testno) {
118359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek			TEST(ltp_syscall(__NR_uname, &name));
119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (TEST_RETURN == -1) {
1209fa8ad01f33c6390cc08626a185111631c8df495Cyril Hrubis				tst_brkm(TFAIL, cleanup, "%s failed - errno = %d : %s",
121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 TCID, TEST_ERRNO,
122354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 strerror(TEST_ERRNO));
123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {
124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				tst_resm(TPASS,
125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 "newuname call succeed: return value = %ld ",
126354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 TEST_RETURN);
127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				TEST(strcmp(name.sysname, "Linux"));	//Linux ?
128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (TEST_RETURN == 0) {
129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO, "This system is %s",
130354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 name.sysname);
131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO,
132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 "The system infomation is :");
133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO,
134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 "System is %s on %s hardware",
135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 name.sysname, name.machine);
1366e05831f23c0bfbad280f36d90684210a86f3630subrata_modak
137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO, "Nodename is %s",
138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 name.nodename);
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO, "Version is %s, %s",
140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 name.release, name.version);
141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO, "Domainname is %s ",
142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 *(&name.machine + 1));
143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					cleanup();
144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_exit();
145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				} else {
146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TFAIL,
147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 "%s failed - errno = %d : %s",
148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 TCID, TEST_ERRNO,
149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 strerror(TEST_ERRNO));
150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_resm(TINFO,
151354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						 "This system is not Linux");
152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					cleanup();
153354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					tst_exit();
154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
1552c28215423293e443469a07ae7011135d058b671Garrett Cooper
156354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
1572c28215423293e443469a07ae7011135d058b671Garrett Cooper
158354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
1596e05831f23c0bfbad280f36d90684210a86f3630subrata_modak	}
160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	tst_exit();
161ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
162