OSDN Git Service

Perform more C warning fixup on all C source files and headers.
[pf3gnuchains/pf3gnuchains3x.git] / winsup / testsuite / winsup.api / ltp / readlink02.c
1 /*
2  * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of version 2 of the GNU General Public License as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it would be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  *
12  * Further, this software is distributed without any warranty that it is
13  * free of the rightful claim of any third person regarding infringement
14  * or the like.  Any license provided herein, whether implied or
15  * otherwise, applies only to this software file.  Patent licenses, if
16  * any, provided herein do not apply to combinations of this program with
17  * other software, or any other product whatsoever.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write the Free Software Foundation, Inc., 59
21  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
22  *
23  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24  * Mountain View, CA  94043, or:
25  *
26  * http://www.sgi.com
27  *
28  * For further information regarding this notice, see:
29  *
30  * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
31  *
32  */
33 /* $Id$ */
34 /**********************************************************
35  * 
36  *    OS Test - Silicon Graphics, Inc.
37  * 
38  *    TEST IDENTIFIER   : readlink02
39  * 
40  *    EXECUTED BY       : anyone
41  * 
42  *    TEST TITLE        : Basic test for readlink(2)
43  * 
44  *    PARENT DOCUMENT   : usctpl01
45  * 
46  *    TEST CASE TOTAL   : 1
47  * 
48  *    WALL CLOCK TIME   : 1
49  * 
50  *    CPU TYPES         : ALL
51  * 
52  *    AUTHOR            : William Roske
53  * 
54  *    CO-PILOT          : Dave Fenner
55  * 
56  *    DATE STARTED      : 03/30/92
57  * 
58  *    INITIAL RELEASE   : UNICOS 7.0
59  * 
60  *    TEST CASES
61  * 
62  *      1.) readlink(2) returns...(See Description)
63  *      
64  *    INPUT SPECIFICATIONS
65  *      The standard options for system call tests are accepted.
66  *      (See the parse_opts(3) man page).
67  * 
68  *    OUTPUT SPECIFICATIONS
69  *      
70  *    DURATION
71  *      Terminates - with frequency and infinite modes.
72  * 
73  *    SIGNALS
74  *      Uses SIGUSR1 to pause before test if option set.
75  *      (See the parse_opts(3) man page).
76  *
77  *    RESOURCES
78  *      None
79  * 
80  *    ENVIRONMENTAL NEEDS
81  *      No run-time environmental needs.
82  * 
83  *    SPECIAL PROCEDURAL REQUIREMENTS
84  *      None
85  * 
86  *    INTERCASE DEPENDENCIES
87  *      None
88  * 
89  *    DETAILED DESCRIPTION
90  *      This is a Phase I test for the readlink(2) system call.  It is intended
91  *      to provide a limited exposure of the system call, for now.  It
92  *      should/will be extended when full functional tests are written for
93  *      readlink(2).
94  * 
95  *      Setup:
96  *        Setup signal handling.
97  *        Pause for SIGUSR1 if option specified.
98  * 
99  *      Test:
100  *       Loop if the proper options are given.
101  *        Execute system call
102  *        Check return code, if system call failed (return=-1)
103  *              Log the errno and Issue a FAIL message.
104  *        Otherwise, Issue a PASS message.
105  * 
106  *      Cleanup:
107  *        Print errno log and/or timing stats if options given
108  * 
109  * 
110  *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/
111
112 #include <sys/types.h>
113 #include <sys/fcntl.h>
114 #include <errno.h>
115 #include <string.h>
116 #include <signal.h>
117 #include "test.h"
118 #include "usctest.h"
119
120 extern void setup();
121 extern void cleanup();
122
123
124
125 const char *TCID="readlink02";  /* Test program identifier.    */
126 int TST_TOTAL=1;                /* Total number of test cases. */
127 extern int Tst_count;           /* Test Case counter for tst_* routines */
128
129 int exp_enos[]={0, 0};
130 char fname[255], buf[255], symlnk[255];
131 int fd;
132
133 int
134 main(int ac, char **av)
135 {
136     int lc;             /* loop counter */
137     const char *msg;            /* message returned from parse_opts */
138     
139     /***************************************************************
140      * parse standard options
141      ***************************************************************/
142     if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
143         tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
144
145     /***************************************************************
146      * perform global setup for test
147      ***************************************************************/
148     setup();
149
150     /* set the expected errnos... */
151     TEST_EXP_ENOS(exp_enos);
152
153     /***************************************************************
154      * check looping state if -c option given
155      ***************************************************************/
156     for (lc=0; TEST_LOOPING(lc); lc++) {
157
158         /* reset Tst_count in case we are looping. */
159         Tst_count=0;
160
161         /* 
162          * Call readlink(2)
163          */
164         TEST(readlink(symlnk, buf, 255));
165         
166         /* check return code */
167         if ( TEST_RETURN == -1 ) {
168             TEST_ERROR_LOG(TEST_ERRNO);
169             tst_resm(TFAIL, "readlink(%s, buf, 255) Failed, errno=%d : %s", symlnk,
170                      TEST_ERRNO, strerror(TEST_ERRNO));
171         } else {
172             
173             /***************************************************************
174              * only perform functional verification if flag set (-f not given)
175              ***************************************************************/
176             if ( STD_FUNCTIONAL_TEST ) {
177                 /* No Verification test, yet... */
178                 tst_resm(TPASS, "readlink(%s, buf, 255) returned %d", symlnk, TEST_RETURN);
179             } 
180         }
181         
182     }   /* End for TEST_LOOPING */
183
184     /***************************************************************
185      * cleanup and exit
186      ***************************************************************/
187     cleanup();
188
189     return 0;
190 }       /* End main */
191
192 /***************************************************************
193  * setup() - performs all ONE TIME setup for this test.
194  ***************************************************************/
195 void 
196 setup()
197 {
198     /* capture signals */
199     tst_sig(NOFORK, DEF_HANDLER, cleanup);
200
201     /* make a temp directory and cd to it */
202     tst_tmpdir();
203
204     /* Pause if that option was specified */
205     TEST_PAUSE;
206
207     sprintf(fname,"./tfile_%d",getpid());
208     if ((fd=open(fname,O_RDWR|O_CREAT,0700)) == -1) {
209        tst_brkm(TBROK, cleanup,
210                 "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
211                 fname, errno, strerror(errno));
212     }
213     if (close(fd) == -1 ) {
214        tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
215                 fname, errno, strerror(errno));
216     }
217     sprintf(symlnk,"./sl_%d",getpid());
218     if (symlink(fname, symlnk) == -1) {
219        tst_resm(TWARN, "symlnk(%s, %s) Failed, errno=%d : %s",
220                 fname, symlnk, errno, strerror(errno));
221     }
222
223 }       /* End setup() */
224
225
226 /***************************************************************
227  * cleanup() - performs all ONE TIME cleanup for this test at
228  *              completion or premature exit.
229  ***************************************************************/
230 void 
231 cleanup()
232 {
233     /*
234      * print timing stats if that option was specified.
235      * print errno log if that option was specified.
236      */
237     TEST_CLEANUP;
238
239     /* Remove tmp dir and all files in it */
240     tst_rmdir();
241
242     /* exit with return code appropriate for results */
243     tst_exit();
244 }       /* End cleanup() */