1f08c3bdfSopenharmony_ci/*
2f08c3bdfSopenharmony_ci *
3f08c3bdfSopenharmony_ci *   Copyright (c) International Business Machines  Corp., 2002
4f08c3bdfSopenharmony_ci *
5f08c3bdfSopenharmony_ci *   This program is free software;  you can redistribute it and/or modify
6f08c3bdfSopenharmony_ci *   it under the terms of the GNU General Public License as published by
7f08c3bdfSopenharmony_ci *   the Free Software Foundation; either version 2 of the License, or
8f08c3bdfSopenharmony_ci *   (at your option) any later version.
9f08c3bdfSopenharmony_ci *
10f08c3bdfSopenharmony_ci *   This program is distributed in the hope that it will be useful,
11f08c3bdfSopenharmony_ci *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
12f08c3bdfSopenharmony_ci *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13f08c3bdfSopenharmony_ci *   the GNU General Public License for more details.
14f08c3bdfSopenharmony_ci *
15f08c3bdfSopenharmony_ci *   You should have received a copy of the GNU General Public License
16f08c3bdfSopenharmony_ci *   along with this program;  if not, write to the Free Software
17f08c3bdfSopenharmony_ci *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18f08c3bdfSopenharmony_ci */
19f08c3bdfSopenharmony_ci
20f08c3bdfSopenharmony_ci/* 10/31/2002	Port to LTP	robbiew@us.ibm.com */
21f08c3bdfSopenharmony_ci/* 06/30/2001	Port to Linux	nsharoff@us.ibm.com */
22f08c3bdfSopenharmony_ci
23f08c3bdfSopenharmony_ci			   /* inode1.c */
24f08c3bdfSopenharmony_ci/*======================================================================
25f08c3bdfSopenharmony_ci	=================== TESTPLAN SEGMENT ===================
26f08c3bdfSopenharmony_ciCALLS:	mkdir, stat, open
27f08c3bdfSopenharmony_ci
28f08c3bdfSopenharmony_ci	run using TERM mode
29f08c3bdfSopenharmony_ci
30f08c3bdfSopenharmony_ci>KEYS:  < file system management I/O
31f08c3bdfSopenharmony_ci>WHAT:  < Do the system's file system management and I/O functions work
32f08c3bdfSopenharmony_ci	< correctly?
33f08c3bdfSopenharmony_ci>HOW:   < Construct a directory tree, create files in it, and verify
34f08c3bdfSopenharmony_ci	< that this was done as expected.
35f08c3bdfSopenharmony_ci>BUGS:  <
36f08c3bdfSopenharmony_ci======================================================================*/
37f08c3bdfSopenharmony_ci/* modified by dale 25-Jul-84 */
38f08c3bdfSopenharmony_ci
39f08c3bdfSopenharmony_ci/************************************************/
40f08c3bdfSopenharmony_ci#define PATH_STRING_LENGTH  100
41f08c3bdfSopenharmony_ci#define NAME_LENGTH  8
42f08c3bdfSopenharmony_ci#define MAX_PATH_STRING_LENGTH  (PATH_STRING_LENGTH - NAME_LENGTH)
43f08c3bdfSopenharmony_ci#define MAX_DEPTH   3
44f08c3bdfSopenharmony_ci#define MAX_BREADTH 3
45f08c3bdfSopenharmony_ci#define FILE_LENGTH 100
46f08c3bdfSopenharmony_ci#define DIRECTORY_MODE  00777
47f08c3bdfSopenharmony_ci#define FILE_MODE       00777
48f08c3bdfSopenharmony_ci
49f08c3bdfSopenharmony_ci/* #define PRINT 		 define to get list while running */
50f08c3bdfSopenharmony_ci
51f08c3bdfSopenharmony_ci#define TRUE  1
52f08c3bdfSopenharmony_ci#define FALSE 0
53f08c3bdfSopenharmony_ci#define READ  0
54f08c3bdfSopenharmony_ci#define WRITE 1
55f08c3bdfSopenharmony_ci
56f08c3bdfSopenharmony_ci#include <stdio.h>
57f08c3bdfSopenharmony_ci#include <errno.h>
58f08c3bdfSopenharmony_ci#include <sys/types.h>
59f08c3bdfSopenharmony_ci#include <sys/stat.h>
60f08c3bdfSopenharmony_ci#include <fcntl.h>
61f08c3bdfSopenharmony_ci#include <signal.h>
62f08c3bdfSopenharmony_ci#include <errno.h>
63f08c3bdfSopenharmony_ci
64f08c3bdfSopenharmony_ci/** LTP Port **/
65f08c3bdfSopenharmony_ci#include "test.h"
66f08c3bdfSopenharmony_ci
67f08c3bdfSopenharmony_civoid blexit(void);
68f08c3bdfSopenharmony_civoid blenter(void);
69f08c3bdfSopenharmony_civoid setup(void);
70f08c3bdfSopenharmony_civoid fail_exit(void);
71f08c3bdfSopenharmony_civoid anyfail(void);
72f08c3bdfSopenharmony_civoid ok_exit(void);
73f08c3bdfSopenharmony_ci
74f08c3bdfSopenharmony_ci#define FAILED 0
75f08c3bdfSopenharmony_ci#define PASSED 1
76f08c3bdfSopenharmony_ci
77f08c3bdfSopenharmony_ciint local_flag = PASSED;
78f08c3bdfSopenharmony_ciint block_number;
79f08c3bdfSopenharmony_ciFILE *temp;
80f08c3bdfSopenharmony_ci
81f08c3bdfSopenharmony_cichar *TCID = "inode01";		/* Test program identifier.    */
82f08c3bdfSopenharmony_ciint TST_TOTAL = 2;		/* Total number of test cases. */
83f08c3bdfSopenharmony_ci/**************/
84f08c3bdfSopenharmony_ci
85f08c3bdfSopenharmony_ci#ifdef LINUX
86f08c3bdfSopenharmony_ci#include <string.h>
87f08c3bdfSopenharmony_ci#endif
88f08c3bdfSopenharmony_ci
89f08c3bdfSopenharmony_cichar name[NAME_LENGTH + 1];
90f08c3bdfSopenharmony_cichar path_string[PATH_STRING_LENGTH + 1];
91f08c3bdfSopenharmony_cichar read_string[PATH_STRING_LENGTH + 1];
92f08c3bdfSopenharmony_cichar write_string[PATH_STRING_LENGTH + 1];
93f08c3bdfSopenharmony_cichar rm_string[200];
94f08c3bdfSopenharmony_ci
95f08c3bdfSopenharmony_ciFILE *list_stream = NULL;
96f08c3bdfSopenharmony_ciint file_id;
97f08c3bdfSopenharmony_ciint list_id;
98f08c3bdfSopenharmony_ci
99f08c3bdfSopenharmony_ciint increment_name(), get_next_name(), mode(), escrivez();
100f08c3bdfSopenharmony_ci
101f08c3bdfSopenharmony_ciint main(void)
102f08c3bdfSopenharmony_ci{
103f08c3bdfSopenharmony_ci	char root[16];		//as pids can get much longer
104f08c3bdfSopenharmony_ci	int gen_ret_val, ch_ret_val, level;
105f08c3bdfSopenharmony_ci	int ret_val;
106f08c3bdfSopenharmony_ci	int generate(), check();
107f08c3bdfSopenharmony_ci	char path_list_string[PATH_STRING_LENGTH + 1];
108f08c3bdfSopenharmony_ci	int status;
109f08c3bdfSopenharmony_ci	int len;
110f08c3bdfSopenharmony_ci	int term();
111f08c3bdfSopenharmony_ci	int snp_ret;
112f08c3bdfSopenharmony_ci
113f08c3bdfSopenharmony_ci	strcpy(path_string, "inode");
114f08c3bdfSopenharmony_ci	sprintf(root, "A%d", getpid());
115f08c3bdfSopenharmony_ci	strcat(path_string, root);
116f08c3bdfSopenharmony_ci
117f08c3bdfSopenharmony_ci	strcpy(rm_string, "rm -rf ");
118f08c3bdfSopenharmony_ci	strcat(rm_string, path_string);
119f08c3bdfSopenharmony_ci
120f08c3bdfSopenharmony_ci	setup();
121f08c3bdfSopenharmony_ci
122f08c3bdfSopenharmony_ci	if (signal(SIGTERM, (void (*)())term) == SIG_ERR) {
123f08c3bdfSopenharmony_ci		fprintf(temp, "\tSIGTERM signal set failed!, errno=%d\n",
124f08c3bdfSopenharmony_ci			errno);
125f08c3bdfSopenharmony_ci		fail_exit();
126f08c3bdfSopenharmony_ci	}
127f08c3bdfSopenharmony_ci
128f08c3bdfSopenharmony_ci	blenter();
129f08c3bdfSopenharmony_ci
130f08c3bdfSopenharmony_ci	/********************************/
131f08c3bdfSopenharmony_ci	/*                              */
132f08c3bdfSopenharmony_ci	/*  make the root directory for */
133f08c3bdfSopenharmony_ci	/*  the tree                    */
134f08c3bdfSopenharmony_ci	/*                              */
135f08c3bdfSopenharmony_ci	/********************************/
136f08c3bdfSopenharmony_ci
137f08c3bdfSopenharmony_ci	ret_val = mkdir(path_string, DIRECTORY_MODE);
138f08c3bdfSopenharmony_ci
139f08c3bdfSopenharmony_ci	if (ret_val == -1) {
140f08c3bdfSopenharmony_ci		perror("mkdir error");
141f08c3bdfSopenharmony_ci		fprintf(temp, "\tcreating directory '%s'\n", path_string);
142f08c3bdfSopenharmony_ci		fprintf(temp, "\t\n%s Impossible to create directory %s\n",
143f08c3bdfSopenharmony_ci			root, path_string);
144f08c3bdfSopenharmony_ci		fail_exit();
145f08c3bdfSopenharmony_ci	}
146f08c3bdfSopenharmony_ci#ifdef PRINT
147f08c3bdfSopenharmony_ci	printf("\n%s\n", path_string);
148f08c3bdfSopenharmony_ci#endif
149f08c3bdfSopenharmony_ci
150f08c3bdfSopenharmony_ci	/****************************************/
151f08c3bdfSopenharmony_ci	/*                                      */
152f08c3bdfSopenharmony_ci	/*  create the "path_list" file, in     */
153f08c3bdfSopenharmony_ci	/*  which the list of generated paths   */
154f08c3bdfSopenharmony_ci	/*  will be stored so that they later   */
155f08c3bdfSopenharmony_ci	/*  may be checked                      */
156f08c3bdfSopenharmony_ci	/*                                      */
157f08c3bdfSopenharmony_ci	/****************************************/
158f08c3bdfSopenharmony_ci
159f08c3bdfSopenharmony_ci	snp_ret = snprintf(path_list_string, sizeof(path_list_string),
160f08c3bdfSopenharmony_ci		"%s/path_list",	path_string);
161f08c3bdfSopenharmony_ci	if (snp_ret < 0 || snp_ret >= sizeof(path_list_string)) {
162f08c3bdfSopenharmony_ci		tst_resm(TBROK, "snprintf(path_list_string,..) returned %d",
163f08c3bdfSopenharmony_ci			snp_ret);
164f08c3bdfSopenharmony_ci		fail_exit();
165f08c3bdfSopenharmony_ci	}
166f08c3bdfSopenharmony_ci	list_id = creat(path_list_string, FILE_MODE);
167f08c3bdfSopenharmony_ci	if (list_id == -1) {
168f08c3bdfSopenharmony_ci		fprintf(temp,
169f08c3bdfSopenharmony_ci			"\t\n%s The path_list file cannot be created, errno=%d \n",
170f08c3bdfSopenharmony_ci			root, errno);
171f08c3bdfSopenharmony_ci		fail_exit();
172f08c3bdfSopenharmony_ci	}
173f08c3bdfSopenharmony_ci
174f08c3bdfSopenharmony_ci	/****************************************/
175f08c3bdfSopenharmony_ci	/*                                      */
176f08c3bdfSopenharmony_ci	/*   and store its name in path_list    */
177f08c3bdfSopenharmony_ci	/*                                      */
178f08c3bdfSopenharmony_ci	/****************************************/
179f08c3bdfSopenharmony_ci
180f08c3bdfSopenharmony_ci	strcpy(write_string, path_string);
181f08c3bdfSopenharmony_ci	len = strlen(write_string);
182f08c3bdfSopenharmony_ci	write_string[len++] = 'D';
183f08c3bdfSopenharmony_ci	write_string[len] = '\0';
184f08c3bdfSopenharmony_ci	escrivez(write_string);
185f08c3bdfSopenharmony_ci
186f08c3bdfSopenharmony_ci	/****************************************/
187f08c3bdfSopenharmony_ci	/*                                      */
188f08c3bdfSopenharmony_ci	/*   generate the directory-file tree   */
189f08c3bdfSopenharmony_ci	/*                                      */
190f08c3bdfSopenharmony_ci	/****************************************/
191f08c3bdfSopenharmony_ci
192f08c3bdfSopenharmony_ci	level = 0;
193f08c3bdfSopenharmony_ci
194f08c3bdfSopenharmony_ci#ifdef PRINT
195f08c3bdfSopenharmony_ci	printf("\n\t%s\n\n", "GENERATING:");
196f08c3bdfSopenharmony_ci#endif
197f08c3bdfSopenharmony_ci
198f08c3bdfSopenharmony_ci	gen_ret_val = generate(path_string, level);
199f08c3bdfSopenharmony_ci
200f08c3bdfSopenharmony_ci	if (gen_ret_val) {
201f08c3bdfSopenharmony_ci		fprintf(temp,
202f08c3bdfSopenharmony_ci			"Failure occured in generate routine, return value %d\n",
203f08c3bdfSopenharmony_ci			gen_ret_val);
204f08c3bdfSopenharmony_ci		local_flag = FAILED;
205f08c3bdfSopenharmony_ci	}
206f08c3bdfSopenharmony_ci
207f08c3bdfSopenharmony_ci	blexit();
208f08c3bdfSopenharmony_ci	blenter();
209f08c3bdfSopenharmony_ci
210f08c3bdfSopenharmony_ci	close(list_id);
211f08c3bdfSopenharmony_ci	list_id = open(path_list_string, READ);
212f08c3bdfSopenharmony_ci	if (list_id == -1) {
213f08c3bdfSopenharmony_ci		fprintf(temp,
214f08c3bdfSopenharmony_ci			"\t\n%s The path_list file cannot be opened for reading, errno=%d\n",
215f08c3bdfSopenharmony_ci			root, errno);
216f08c3bdfSopenharmony_ci		fail_exit();
217f08c3bdfSopenharmony_ci	}
218f08c3bdfSopenharmony_ci	list_stream = fdopen(list_id, "r");
219f08c3bdfSopenharmony_ci
220f08c3bdfSopenharmony_ci	/****************************************/
221f08c3bdfSopenharmony_ci	/*                                      */
222f08c3bdfSopenharmony_ci	/*   check the directory-file tree      */
223f08c3bdfSopenharmony_ci	/*      for correctness                 */
224f08c3bdfSopenharmony_ci	/*                                      */
225f08c3bdfSopenharmony_ci	/****************************************/
226f08c3bdfSopenharmony_ci
227f08c3bdfSopenharmony_ci#ifdef PRINT
228f08c3bdfSopenharmony_ci	printf("\n\t%s\n\n", "CHECKING:");
229f08c3bdfSopenharmony_ci#endif
230f08c3bdfSopenharmony_ci
231f08c3bdfSopenharmony_ci	ch_ret_val = check();
232f08c3bdfSopenharmony_ci
233f08c3bdfSopenharmony_ci	if (ch_ret_val) {
234f08c3bdfSopenharmony_ci		fprintf(temp,
235f08c3bdfSopenharmony_ci			"Failure occured in check routine, return value %d\n",
236f08c3bdfSopenharmony_ci			ch_ret_val);
237f08c3bdfSopenharmony_ci		local_flag = FAILED;
238f08c3bdfSopenharmony_ci	}
239f08c3bdfSopenharmony_ci
240f08c3bdfSopenharmony_ci	status = fclose(list_stream);
241f08c3bdfSopenharmony_ci	if (status != 0) {
242f08c3bdfSopenharmony_ci		fprintf(temp,
243f08c3bdfSopenharmony_ci			"Failed to close list_stream: ret=%d errno=%d (%s)\n",
244f08c3bdfSopenharmony_ci			status, errno, strerror(errno));
245f08c3bdfSopenharmony_ci		local_flag = FAILED;
246f08c3bdfSopenharmony_ci	}
247f08c3bdfSopenharmony_ci
248f08c3bdfSopenharmony_ci	blexit();
249f08c3bdfSopenharmony_ci
250f08c3bdfSopenharmony_ci	/*
251f08c3bdfSopenharmony_ci	 * Now fork and exec a system call to remove the directory.
252f08c3bdfSopenharmony_ci	 */
253f08c3bdfSopenharmony_ci
254f08c3bdfSopenharmony_ci#ifdef DEBUG
255f08c3bdfSopenharmony_ci	fprintf(temp, "\nClean up:\trm string = %s\n", rm_string);
256f08c3bdfSopenharmony_ci#endif
257f08c3bdfSopenharmony_ci	fflush(stdout);
258f08c3bdfSopenharmony_ci	fflush(temp);
259f08c3bdfSopenharmony_ci
260f08c3bdfSopenharmony_ci	status = system(rm_string);
261f08c3bdfSopenharmony_ci
262f08c3bdfSopenharmony_ci	if (status) {
263f08c3bdfSopenharmony_ci		fprintf(temp, "Caution-``%s'' may have failed\n", rm_string);
264f08c3bdfSopenharmony_ci		fprintf(temp, "rm command exit status = %d\n", status);
265f08c3bdfSopenharmony_ci	}
266f08c3bdfSopenharmony_ci
267f08c3bdfSopenharmony_ci	/****************************************/
268f08c3bdfSopenharmony_ci	/*                                      */
269f08c3bdfSopenharmony_ci	/*         .....and exit main           */
270f08c3bdfSopenharmony_ci	/*                                      */
271f08c3bdfSopenharmony_ci	/****************************************/
272f08c3bdfSopenharmony_ci
273f08c3bdfSopenharmony_ci	anyfail();
274f08c3bdfSopenharmony_ci	/***** NOT REACHED ******/
275f08c3bdfSopenharmony_ci	tst_exit();
276f08c3bdfSopenharmony_ci}
277f08c3bdfSopenharmony_ci
278f08c3bdfSopenharmony_ciint generate(char *string, int level)
279f08c3bdfSopenharmony_ci
280f08c3bdfSopenharmony_ci/****************************************/
281f08c3bdfSopenharmony_ci/*					*/
282f08c3bdfSopenharmony_ci/*   generate recursively a tree of	*/
283f08c3bdfSopenharmony_ci/*   directories and files:  within   	*/
284f08c3bdfSopenharmony_ci/*   created directory, an alternating	*/
285f08c3bdfSopenharmony_ci/*   series of files and directories 	*/
286f08c3bdfSopenharmony_ci/*   are constructed---until tree	*/
287f08c3bdfSopenharmony_ci/*   breadth and depth limits are	*/
288f08c3bdfSopenharmony_ci/*   reached or an error occurs		*/
289f08c3bdfSopenharmony_ci/*					*/
290f08c3bdfSopenharmony_ci/****************************************/
291f08c3bdfSopenharmony_ci/***************************/
292f08c3bdfSopenharmony_ci/*  string[]      	   */
293f08c3bdfSopenharmony_ci/*  the directory path     */
294f08c3bdfSopenharmony_ci/*  string below which a   */
295f08c3bdfSopenharmony_ci/*  tree is generated      */
296f08c3bdfSopenharmony_ci/*                         */
297f08c3bdfSopenharmony_ci/***************************/
298f08c3bdfSopenharmony_ci
299f08c3bdfSopenharmony_ci/***************************/
300f08c3bdfSopenharmony_ci/* level                   */
301f08c3bdfSopenharmony_ci/* the tree depth variable */
302f08c3bdfSopenharmony_ci/*                         */
303f08c3bdfSopenharmony_ci/***************************/
304f08c3bdfSopenharmony_ci{
305f08c3bdfSopenharmony_ci	int switch_flag;
306f08c3bdfSopenharmony_ci	int ret_val = 0;
307f08c3bdfSopenharmony_ci	int new_ret_val, len, ret_len;
308f08c3bdfSopenharmony_ci	char new_string[PATH_STRING_LENGTH + 1];
309f08c3bdfSopenharmony_ci	int new_level;
310f08c3bdfSopenharmony_ci	int i, j;		/* iteration counters */
311f08c3bdfSopenharmony_ci	int snp_ret;
312f08c3bdfSopenharmony_ci
313f08c3bdfSopenharmony_ci	switch_flag = level & TRUE;
314f08c3bdfSopenharmony_ci	if (strlen(string) >= MAX_PATH_STRING_LENGTH) {
315f08c3bdfSopenharmony_ci
316f08c3bdfSopenharmony_ci		/********************************/
317f08c3bdfSopenharmony_ci		/*                              */
318f08c3bdfSopenharmony_ci		/*   Maximum path name length   */
319f08c3bdfSopenharmony_ci		/*          reached             */
320f08c3bdfSopenharmony_ci		/*                              */
321f08c3bdfSopenharmony_ci		/********************************/
322f08c3bdfSopenharmony_ci
323f08c3bdfSopenharmony_ci		fprintf(temp, "\tMaximum path_name length reached.\n");
324f08c3bdfSopenharmony_ci		return (-1);
325f08c3bdfSopenharmony_ci	} else if (level < MAX_DEPTH) {
326f08c3bdfSopenharmony_ci		for (i = 0; i <= MAX_BREADTH; i++) {
327f08c3bdfSopenharmony_ci			get_next_name();
328f08c3bdfSopenharmony_ci			snp_ret = snprintf(new_string, sizeof(new_string),
329f08c3bdfSopenharmony_ci				"%s/%s", string, name);
330f08c3bdfSopenharmony_ci			if (snp_ret < 0 || snp_ret >= sizeof(new_string)) {
331f08c3bdfSopenharmony_ci				tst_resm(TBROK, "snprintf(new_string,..) "
332f08c3bdfSopenharmony_ci					"returned %d", snp_ret);
333f08c3bdfSopenharmony_ci				fail_exit();
334f08c3bdfSopenharmony_ci			}
335f08c3bdfSopenharmony_ci
336f08c3bdfSopenharmony_ci			/****************************************/
337f08c3bdfSopenharmony_ci			/*                                      */
338f08c3bdfSopenharmony_ci			/*    switch between creating files     */
339f08c3bdfSopenharmony_ci			/*    and making directories            */
340f08c3bdfSopenharmony_ci			/*                                      */
341f08c3bdfSopenharmony_ci			/****************************************/
342f08c3bdfSopenharmony_ci
343f08c3bdfSopenharmony_ci			if (switch_flag) {
344f08c3bdfSopenharmony_ci				switch_flag = FALSE;
345f08c3bdfSopenharmony_ci
346f08c3bdfSopenharmony_ci				/****************************************/
347f08c3bdfSopenharmony_ci				/*                                      */
348f08c3bdfSopenharmony_ci				/*        create a new file             */
349f08c3bdfSopenharmony_ci				/*                                      */
350f08c3bdfSopenharmony_ci				/****************************************/
351f08c3bdfSopenharmony_ci
352f08c3bdfSopenharmony_ci				file_id = creat(new_string, FILE_MODE);
353f08c3bdfSopenharmony_ci				if (file_id == -1) {
354f08c3bdfSopenharmony_ci					fprintf(temp,
355f08c3bdfSopenharmony_ci						"\tImpossible to create file %s, errno=%d\n",
356f08c3bdfSopenharmony_ci						new_string, errno);
357f08c3bdfSopenharmony_ci					return (-2);
358f08c3bdfSopenharmony_ci				}
359f08c3bdfSopenharmony_ci#ifdef PRINT
360f08c3bdfSopenharmony_ci				printf("%d  %s F\n", level, new_string);
361f08c3bdfSopenharmony_ci#endif
362f08c3bdfSopenharmony_ci
363f08c3bdfSopenharmony_ci				/****************************************/
364f08c3bdfSopenharmony_ci				/*                                      */
365f08c3bdfSopenharmony_ci				/*            write to it               */
366f08c3bdfSopenharmony_ci				/*                                      */
367f08c3bdfSopenharmony_ci				/****************************************/
368f08c3bdfSopenharmony_ci
369f08c3bdfSopenharmony_ci				len = strlen(new_string);
370f08c3bdfSopenharmony_ci				for (j = 1; j <= FILE_LENGTH; j++) {
371f08c3bdfSopenharmony_ci					ret_len =
372f08c3bdfSopenharmony_ci					    write(file_id, new_string, len);
373f08c3bdfSopenharmony_ci					if (ret_len != len) {
374f08c3bdfSopenharmony_ci						fprintf(temp,
375f08c3bdfSopenharmony_ci							"\tUnsuccessful write to file %s, expected return of %d, got %d, errno=%d\n",
376f08c3bdfSopenharmony_ci							new_string, len,
377f08c3bdfSopenharmony_ci							ret_len, errno);
378f08c3bdfSopenharmony_ci						return (-3);
379f08c3bdfSopenharmony_ci					}
380f08c3bdfSopenharmony_ci				}
381f08c3bdfSopenharmony_ci				close(file_id);
382f08c3bdfSopenharmony_ci
383f08c3bdfSopenharmony_ci				/****************************************/
384f08c3bdfSopenharmony_ci				/*                                      */
385f08c3bdfSopenharmony_ci				/*   and store its name in path_list    */
386f08c3bdfSopenharmony_ci				/*                                      */
387f08c3bdfSopenharmony_ci				/****************************************/
388f08c3bdfSopenharmony_ci
389f08c3bdfSopenharmony_ci				strcpy(write_string, new_string);
390f08c3bdfSopenharmony_ci				len = strlen(write_string);
391f08c3bdfSopenharmony_ci				write_string[len++] = 'F';
392f08c3bdfSopenharmony_ci				write_string[len] = '\0';
393f08c3bdfSopenharmony_ci				escrivez(write_string);
394f08c3bdfSopenharmony_ci			} else {
395f08c3bdfSopenharmony_ci				switch_flag = TRUE;
396f08c3bdfSopenharmony_ci
397f08c3bdfSopenharmony_ci				/****************************************/
398f08c3bdfSopenharmony_ci				/*                                      */
399f08c3bdfSopenharmony_ci				/*       or make a directory            */
400f08c3bdfSopenharmony_ci				/*                                      */
401f08c3bdfSopenharmony_ci				/****************************************/
402f08c3bdfSopenharmony_ci
403f08c3bdfSopenharmony_ci				ret_val = mkdir(new_string, DIRECTORY_MODE);
404f08c3bdfSopenharmony_ci
405f08c3bdfSopenharmony_ci				if (ret_val != 0) {
406f08c3bdfSopenharmony_ci					fprintf(temp,
407f08c3bdfSopenharmony_ci						"\tImpossible to create directory %s, errno=%d\n",
408f08c3bdfSopenharmony_ci						new_string, errno);
409f08c3bdfSopenharmony_ci					return (-5);
410f08c3bdfSopenharmony_ci				}
411f08c3bdfSopenharmony_ci#ifdef PRINT
412f08c3bdfSopenharmony_ci				printf("%d  %s D\n", level, new_string);
413f08c3bdfSopenharmony_ci#endif
414f08c3bdfSopenharmony_ci
415f08c3bdfSopenharmony_ci				/****************************************/
416f08c3bdfSopenharmony_ci				/*                                      */
417f08c3bdfSopenharmony_ci				/*     store its name in path_list      */
418f08c3bdfSopenharmony_ci				/*                                      */
419f08c3bdfSopenharmony_ci				/****************************************/
420f08c3bdfSopenharmony_ci
421f08c3bdfSopenharmony_ci				strcpy(write_string, new_string);
422f08c3bdfSopenharmony_ci				len = strlen(write_string);
423f08c3bdfSopenharmony_ci				write_string[len++] = 'D';
424f08c3bdfSopenharmony_ci				write_string[len] = '\0';
425f08c3bdfSopenharmony_ci				escrivez(write_string);
426f08c3bdfSopenharmony_ci
427f08c3bdfSopenharmony_ci				/****************************************/
428f08c3bdfSopenharmony_ci				/*                                      */
429f08c3bdfSopenharmony_ci				/*      and generate a new level        */
430f08c3bdfSopenharmony_ci				/*                                      */
431f08c3bdfSopenharmony_ci				/****************************************/
432f08c3bdfSopenharmony_ci
433f08c3bdfSopenharmony_ci				new_level = level + 1;
434f08c3bdfSopenharmony_ci				new_ret_val = generate(new_string, new_level);
435f08c3bdfSopenharmony_ci				if (new_ret_val < ret_val)
436f08c3bdfSopenharmony_ci					ret_val = new_ret_val;
437f08c3bdfSopenharmony_ci			}
438f08c3bdfSopenharmony_ci		}
439f08c3bdfSopenharmony_ci
440f08c3bdfSopenharmony_ci		/********************************/
441f08c3bdfSopenharmony_ci		/*                              */
442f08c3bdfSopenharmony_ci		/*    Maximum breadth reached   */
443f08c3bdfSopenharmony_ci		/*                              */
444f08c3bdfSopenharmony_ci		/********************************/
445f08c3bdfSopenharmony_ci
446f08c3bdfSopenharmony_ci		return (ret_val);
447f08c3bdfSopenharmony_ci	} else
448f08c3bdfSopenharmony_ci		    /********************************/
449f08c3bdfSopenharmony_ci		/*                             */
450f08c3bdfSopenharmony_ci		/*    Maximum depth reached    */
451f08c3bdfSopenharmony_ci		/*                             */
452f08c3bdfSopenharmony_ci /********************************/
453f08c3bdfSopenharmony_ci		return 0;
454f08c3bdfSopenharmony_ci}
455f08c3bdfSopenharmony_ci
456f08c3bdfSopenharmony_ciint check(void)
457f08c3bdfSopenharmony_ci
458f08c3bdfSopenharmony_ci/****************************************/
459f08c3bdfSopenharmony_ci/*					*/
460f08c3bdfSopenharmony_ci/*   check for file and directory	*/
461f08c3bdfSopenharmony_ci/*   correctness by reading records	*/
462f08c3bdfSopenharmony_ci/*   from the path_list and attempting	*/
463f08c3bdfSopenharmony_ci/*   to determine if the corresponding	*/
464f08c3bdfSopenharmony_ci/*   files or directories are as 	*/
465f08c3bdfSopenharmony_ci/*   created 				*/
466f08c3bdfSopenharmony_ci/*					*/
467f08c3bdfSopenharmony_ci/****************************************/
468f08c3bdfSopenharmony_ci{
469f08c3bdfSopenharmony_ci	int len, path_mode, val, ret_len, j;
470f08c3bdfSopenharmony_ci
471f08c3bdfSopenharmony_ci	for (;;) {
472f08c3bdfSopenharmony_ci
473f08c3bdfSopenharmony_ci		/****************************************/
474f08c3bdfSopenharmony_ci		/*                                      */
475f08c3bdfSopenharmony_ci		/*  read a path string from path_list   */
476f08c3bdfSopenharmony_ci		/*                                      */
477f08c3bdfSopenharmony_ci		/****************************************/
478f08c3bdfSopenharmony_ci
479f08c3bdfSopenharmony_ci		if (fscanf(list_stream, "%s", path_string) == EOF) {
480f08c3bdfSopenharmony_ci
481f08c3bdfSopenharmony_ci#ifdef PRINT
482f08c3bdfSopenharmony_ci			printf("\nEnd of path_list file reached \n");
483f08c3bdfSopenharmony_ci#endif
484f08c3bdfSopenharmony_ci
485f08c3bdfSopenharmony_ci			return 0;
486f08c3bdfSopenharmony_ci		}
487f08c3bdfSopenharmony_ci#ifdef PRINT
488f08c3bdfSopenharmony_ci		printf("%s\n", path_string);
489f08c3bdfSopenharmony_ci#endif
490f08c3bdfSopenharmony_ci
491f08c3bdfSopenharmony_ci		len = strlen(path_string);
492f08c3bdfSopenharmony_ci		len--;
493f08c3bdfSopenharmony_ci		if (path_string[len] == 'F') {
494f08c3bdfSopenharmony_ci
495f08c3bdfSopenharmony_ci		/********************************/
496f08c3bdfSopenharmony_ci			/*                              */
497f08c3bdfSopenharmony_ci			/*    this should be a file     */
498f08c3bdfSopenharmony_ci			/*                              */
499f08c3bdfSopenharmony_ci		/********************************/
500f08c3bdfSopenharmony_ci
501f08c3bdfSopenharmony_ci			path_string[len] = '\0';
502f08c3bdfSopenharmony_ci			file_id = open(path_string, READ);
503f08c3bdfSopenharmony_ci			if (file_id <= 0) {
504f08c3bdfSopenharmony_ci				fprintf(temp,
505f08c3bdfSopenharmony_ci					"\tImpossible to open file %s, errno=%d\n",
506f08c3bdfSopenharmony_ci					path_string, errno);
507f08c3bdfSopenharmony_ci				return (-1);
508f08c3bdfSopenharmony_ci			}
509f08c3bdfSopenharmony_ci
510f08c3bdfSopenharmony_ci			else {
511f08c3bdfSopenharmony_ci				/********************************/
512f08c3bdfSopenharmony_ci				/*                              */
513f08c3bdfSopenharmony_ci				/*    check its contents        */
514f08c3bdfSopenharmony_ci				/*                              */
515f08c3bdfSopenharmony_ci				/********************************/
516f08c3bdfSopenharmony_ci
517f08c3bdfSopenharmony_ci				len = strlen(path_string);
518f08c3bdfSopenharmony_ci				for (j = 1; j <= FILE_LENGTH; j++) {
519f08c3bdfSopenharmony_ci					ret_len =
520f08c3bdfSopenharmony_ci					    read(file_id, read_string, len);
521f08c3bdfSopenharmony_ci					if (len != ret_len) {
522f08c3bdfSopenharmony_ci						fprintf(temp,
523f08c3bdfSopenharmony_ci							"\tFile read error for file %s, expected return of %d, got %d, errno=%d\n",
524f08c3bdfSopenharmony_ci							path_string, len,
525f08c3bdfSopenharmony_ci							ret_len, errno);
526f08c3bdfSopenharmony_ci						return (-3);
527f08c3bdfSopenharmony_ci					}
528f08c3bdfSopenharmony_ci					read_string[len] = '\0';
529f08c3bdfSopenharmony_ci					val = strcmp(read_string, path_string);
530f08c3bdfSopenharmony_ci					if (val != 0) {
531f08c3bdfSopenharmony_ci						fprintf(temp,
532f08c3bdfSopenharmony_ci							"\tContents of file %s are different than expected: %s\n",
533f08c3bdfSopenharmony_ci							path_string,
534f08c3bdfSopenharmony_ci							read_string);
535f08c3bdfSopenharmony_ci						return (-4);
536f08c3bdfSopenharmony_ci					}
537f08c3bdfSopenharmony_ci				}
538f08c3bdfSopenharmony_ci				close(file_id);
539f08c3bdfSopenharmony_ci			}	/* else for */
540f08c3bdfSopenharmony_ci			if (ret_len <= 0) {
541f08c3bdfSopenharmony_ci				fprintf(temp, "\tImpossible to read file %s\n",
542f08c3bdfSopenharmony_ci					path_string);
543f08c3bdfSopenharmony_ci				return (-2);
544f08c3bdfSopenharmony_ci			}
545f08c3bdfSopenharmony_ci		} else {
546f08c3bdfSopenharmony_ci
547f08c3bdfSopenharmony_ci		/********************************/
548f08c3bdfSopenharmony_ci			/*                              */
549f08c3bdfSopenharmony_ci			/*  otherwise..........         */
550f08c3bdfSopenharmony_ci			/*  it should be a directory    */
551f08c3bdfSopenharmony_ci			/*                              */
552f08c3bdfSopenharmony_ci		/********************************/
553f08c3bdfSopenharmony_ci
554f08c3bdfSopenharmony_ci			path_string[len] = '\0';
555f08c3bdfSopenharmony_ci			path_mode = mode(path_string);
556f08c3bdfSopenharmony_ci			if (path_mode == -1) {
557f08c3bdfSopenharmony_ci				fprintf(temp,
558f08c3bdfSopenharmony_ci					"\tPreviously created directory path %s was not open\n",
559f08c3bdfSopenharmony_ci					path_string);
560f08c3bdfSopenharmony_ci				return (-4);
561f08c3bdfSopenharmony_ci			}
562f08c3bdfSopenharmony_ci			if ((040000 & path_mode) != 040000) {
563f08c3bdfSopenharmony_ci				fprintf(temp,
564f08c3bdfSopenharmony_ci					"\tPath %s was not recognized to be a directory\n",
565f08c3bdfSopenharmony_ci					path_string);
566f08c3bdfSopenharmony_ci				fprintf(temp, "\tIts mode is %o\n", path_mode);
567f08c3bdfSopenharmony_ci				return (-5);
568f08c3bdfSopenharmony_ci			}
569f08c3bdfSopenharmony_ci		}
570f08c3bdfSopenharmony_ci	}			/* while */
571f08c3bdfSopenharmony_ci}
572f08c3bdfSopenharmony_ci
573f08c3bdfSopenharmony_ciint get_next_name(void)
574f08c3bdfSopenharmony_ci
575f08c3bdfSopenharmony_ci/****************************************/
576f08c3bdfSopenharmony_ci/*					*/
577f08c3bdfSopenharmony_ci/*   get the next---in a dictionary	*/
578f08c3bdfSopenharmony_ci/*   sense---file or directory name	*/
579f08c3bdfSopenharmony_ci/*					*/
580f08c3bdfSopenharmony_ci/****************************************/
581f08c3bdfSopenharmony_ci{
582f08c3bdfSopenharmony_ci	static int k;
583f08c3bdfSopenharmony_ci	int i;
584f08c3bdfSopenharmony_ci	int last_position;
585f08c3bdfSopenharmony_ci
586f08c3bdfSopenharmony_ci	last_position = NAME_LENGTH - 1;
587f08c3bdfSopenharmony_ci	if (k == 0) {
588f08c3bdfSopenharmony_ci
589f08c3bdfSopenharmony_ci		/************************/
590f08c3bdfSopenharmony_ci		/*                      */
591f08c3bdfSopenharmony_ci		/*   initialize name    */
592f08c3bdfSopenharmony_ci		/*                      */
593f08c3bdfSopenharmony_ci		/************************/
594f08c3bdfSopenharmony_ci
595f08c3bdfSopenharmony_ci		for (i = 0; i < NAME_LENGTH; i++)
596f08c3bdfSopenharmony_ci			name[i] = 'a';
597f08c3bdfSopenharmony_ci		name[NAME_LENGTH] = '\0';
598f08c3bdfSopenharmony_ci		k++;
599f08c3bdfSopenharmony_ci	}
600f08c3bdfSopenharmony_ci					    /********************************/
601f08c3bdfSopenharmony_ci	/*                              */
602f08c3bdfSopenharmony_ci	else
603f08c3bdfSopenharmony_ci		increment_name(last_position);	/* i.e., beginning at the last  */
604f08c3bdfSopenharmony_ci	/* position                     */
605f08c3bdfSopenharmony_ci	/*                              */
606f08c3bdfSopenharmony_ci					    /********************************/
607f08c3bdfSopenharmony_ci	return 0;
608f08c3bdfSopenharmony_ci}
609f08c3bdfSopenharmony_ci
610f08c3bdfSopenharmony_ciint increment_name(int position)
611f08c3bdfSopenharmony_ci
612f08c3bdfSopenharmony_ci/****************************************/
613f08c3bdfSopenharmony_ci/*					*/
614f08c3bdfSopenharmony_ci/*  recursively revise the letters in 	*/
615f08c3bdfSopenharmony_ci/*  a name to get the lexiographically	*/
616f08c3bdfSopenharmony_ci/*  next name				*/
617f08c3bdfSopenharmony_ci/*					*/
618f08c3bdfSopenharmony_ci/****************************************/
619f08c3bdfSopenharmony_ci{
620f08c3bdfSopenharmony_ci	int next_position;
621f08c3bdfSopenharmony_ci
622f08c3bdfSopenharmony_ci	if (name[position] == 'z')
623f08c3bdfSopenharmony_ci		if (position == 0) {
624f08c3bdfSopenharmony_ci			fprintf(temp,
625f08c3bdfSopenharmony_ci				"\tERROR: There are no more available names\n");
626f08c3bdfSopenharmony_ci			fail_exit();
627f08c3bdfSopenharmony_ci		} else {
628f08c3bdfSopenharmony_ci			name[position] = 'a';	       /**********************/
629f08c3bdfSopenharmony_ci			next_position = --position;	/*                    */
630f08c3bdfSopenharmony_ci			increment_name(next_position);	/*  increment the     */
631f08c3bdfSopenharmony_ci			/*  previous letter   */
632f08c3bdfSopenharmony_ci			/*                    */
633f08c3bdfSopenharmony_ci						       /**********************/
634f08c3bdfSopenharmony_ci		}
635f08c3bdfSopenharmony_ci				  /*********************************/
636f08c3bdfSopenharmony_ci	/*                               */
637f08c3bdfSopenharmony_ci	else
638f08c3bdfSopenharmony_ci		name[position]++;	/* otherwise, increment this one */
639f08c3bdfSopenharmony_ci	return 0;		/*                               */
640f08c3bdfSopenharmony_ci				  /*********************************/
641f08c3bdfSopenharmony_ci}
642f08c3bdfSopenharmony_ci
643f08c3bdfSopenharmony_ciint mode(char *path_string)
644f08c3bdfSopenharmony_ci
645f08c3bdfSopenharmony_ci/****************************************/
646f08c3bdfSopenharmony_ci/*					*/
647f08c3bdfSopenharmony_ci/*   determine and return the mode of	*/
648f08c3bdfSopenharmony_ci/*   the file named by path_string 	*/
649f08c3bdfSopenharmony_ci/*					*/
650f08c3bdfSopenharmony_ci/****************************************/
651f08c3bdfSopenharmony_ci{
652f08c3bdfSopenharmony_ci	struct stat buf;
653f08c3bdfSopenharmony_ci	int ret_val, mod;
654f08c3bdfSopenharmony_ci
655f08c3bdfSopenharmony_ci	ret_val = stat(path_string, &buf);
656f08c3bdfSopenharmony_ci	if (ret_val == -1)
657f08c3bdfSopenharmony_ci		return (-1);
658f08c3bdfSopenharmony_ci	else {
659f08c3bdfSopenharmony_ci		mod = buf.st_mode;
660f08c3bdfSopenharmony_ci		return (mod);
661f08c3bdfSopenharmony_ci	}
662f08c3bdfSopenharmony_ci}
663f08c3bdfSopenharmony_ci
664f08c3bdfSopenharmony_ciint escrivez(char *string)
665f08c3bdfSopenharmony_ci{
666f08c3bdfSopenharmony_ci	char write_string[PATH_STRING_LENGTH + 1];
667f08c3bdfSopenharmony_ci	int len, ret_len;
668f08c3bdfSopenharmony_ci
669f08c3bdfSopenharmony_ci	strcpy(write_string, string);
670f08c3bdfSopenharmony_ci	len = strlen(write_string);
671f08c3bdfSopenharmony_ci	write_string[len] = '\n';
672f08c3bdfSopenharmony_ci	len++;
673f08c3bdfSopenharmony_ci	ret_len = write(list_id, write_string, len);
674f08c3bdfSopenharmony_ci	if (len != ret_len) {
675f08c3bdfSopenharmony_ci		fprintf(temp,
676f08c3bdfSopenharmony_ci			"\tA string of deviant length %d written to path_list, errno=%d\n",
677f08c3bdfSopenharmony_ci			ret_len, errno);
678f08c3bdfSopenharmony_ci		fail_exit();
679f08c3bdfSopenharmony_ci	}
680f08c3bdfSopenharmony_ci	return 0;
681f08c3bdfSopenharmony_ci}
682f08c3bdfSopenharmony_ci
683f08c3bdfSopenharmony_ciint term(void)
684f08c3bdfSopenharmony_ci{
685f08c3bdfSopenharmony_ci	int status;
686f08c3bdfSopenharmony_ci
687f08c3bdfSopenharmony_ci	fprintf(temp, "\tterm - got SIGTERM, cleaning up.\n");
688f08c3bdfSopenharmony_ci
689f08c3bdfSopenharmony_ci	if (list_stream != NULL)
690f08c3bdfSopenharmony_ci		fclose(list_stream);
691f08c3bdfSopenharmony_ci	close(list_id);
692f08c3bdfSopenharmony_ci	close(file_id);
693f08c3bdfSopenharmony_ci
694f08c3bdfSopenharmony_ci	status = system(rm_string);
695f08c3bdfSopenharmony_ci	if (status) {
696f08c3bdfSopenharmony_ci		fprintf(temp, "Caution - ``%s'' may have failed.\n", rm_string);
697f08c3bdfSopenharmony_ci		fprintf(temp, "rm command exit status = %d\n", status);
698f08c3bdfSopenharmony_ci	}
699f08c3bdfSopenharmony_ci
700f08c3bdfSopenharmony_ci	ok_exit();
701f08c3bdfSopenharmony_ci	/***NOT REACHED***/
702f08c3bdfSopenharmony_ci	return 0;
703f08c3bdfSopenharmony_ci
704f08c3bdfSopenharmony_ci}
705f08c3bdfSopenharmony_ci
706f08c3bdfSopenharmony_ci/** LTP Port **/
707f08c3bdfSopenharmony_ci/*
708f08c3bdfSopenharmony_ci * setup
709f08c3bdfSopenharmony_ci *
710f08c3bdfSopenharmony_ci * Do set up - here its a dummy function
711f08c3bdfSopenharmony_ci */
712f08c3bdfSopenharmony_civoid setup(void)
713f08c3bdfSopenharmony_ci{
714f08c3bdfSopenharmony_ci	tst_tmpdir();
715f08c3bdfSopenharmony_ci	temp = stderr;
716f08c3bdfSopenharmony_ci}
717f08c3bdfSopenharmony_ci
718f08c3bdfSopenharmony_ci/*
719f08c3bdfSopenharmony_ci * Function: blexit()
720f08c3bdfSopenharmony_ci *
721f08c3bdfSopenharmony_ci * Description: This function will exit a block, a block may be a lo
722f08c3bdfSopenharmony_cigical unit
723f08c3bdfSopenharmony_ci *              of a test. It will report the status if the test ie
724f08c3bdfSopenharmony_cifail or
725f08c3bdfSopenharmony_ci *              pass.
726f08c3bdfSopenharmony_ci */
727f08c3bdfSopenharmony_civoid blexit(void)
728f08c3bdfSopenharmony_ci{
729f08c3bdfSopenharmony_ci	(local_flag == PASSED) ? tst_resm(TPASS, "Test block %d", block_number)
730f08c3bdfSopenharmony_ci	    : tst_resm(TFAIL, "Test block %d", block_number);
731f08c3bdfSopenharmony_ci	block_number++;
732f08c3bdfSopenharmony_ci	return;
733f08c3bdfSopenharmony_ci}
734f08c3bdfSopenharmony_ci
735f08c3bdfSopenharmony_ci/*
736f08c3bdfSopenharmony_ci * Function: blenter()
737f08c3bdfSopenharmony_ci *
738f08c3bdfSopenharmony_ci * Description: Print message on entering a new block
739f08c3bdfSopenharmony_ci */
740f08c3bdfSopenharmony_civoid blenter(void)
741f08c3bdfSopenharmony_ci{
742f08c3bdfSopenharmony_ci	local_flag = PASSED;
743f08c3bdfSopenharmony_ci	return;
744f08c3bdfSopenharmony_ci}
745f08c3bdfSopenharmony_ci
746f08c3bdfSopenharmony_ci/*
747f08c3bdfSopenharmony_ci * fail_exit()
748f08c3bdfSopenharmony_ci *
749f08c3bdfSopenharmony_ci * Exit on failure
750f08c3bdfSopenharmony_ci */
751f08c3bdfSopenharmony_civoid fail_exit(void)
752f08c3bdfSopenharmony_ci{
753f08c3bdfSopenharmony_ci	tst_brkm(TFAIL, tst_rmdir, "Test failed");
754f08c3bdfSopenharmony_ci}
755f08c3bdfSopenharmony_ci
756f08c3bdfSopenharmony_ci/*
757f08c3bdfSopenharmony_ci *
758f08c3bdfSopenharmony_ci * Function: anyfail()
759f08c3bdfSopenharmony_ci *
760f08c3bdfSopenharmony_ci * Description: Exit a test.
761f08c3bdfSopenharmony_ci */
762f08c3bdfSopenharmony_civoid anyfail(void)
763f08c3bdfSopenharmony_ci{
764f08c3bdfSopenharmony_ci	(local_flag == FAILED) ? tst_resm(TFAIL, "Test failed")
765f08c3bdfSopenharmony_ci	    : tst_resm(TPASS, "Test passed");
766f08c3bdfSopenharmony_ci	tst_rmdir();
767f08c3bdfSopenharmony_ci	tst_exit();
768f08c3bdfSopenharmony_ci}
769f08c3bdfSopenharmony_ci
770f08c3bdfSopenharmony_ci/*
771f08c3bdfSopenharmony_ci * ok_exit
772f08c3bdfSopenharmony_ci *
773f08c3bdfSopenharmony_ci * Calling block passed the test
774f08c3bdfSopenharmony_ci */
775f08c3bdfSopenharmony_civoid ok_exit(void)
776f08c3bdfSopenharmony_ci{
777f08c3bdfSopenharmony_ci	local_flag = PASSED;
778f08c3bdfSopenharmony_ci	return;
779f08c3bdfSopenharmony_ci}
780