(root)/
strace-6.5/
tests-mx32/
readdir.c
       1  /*
       2   * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@strace.io>
       3   * Copyright (c) 2015-2021 The strace developers.
       4   * All rights reserved.
       5   *
       6   * SPDX-License-Identifier: GPL-2.0-or-later
       7   */
       8  
       9  #include "tests.h"
      10  #include "scno.h"
      11  
      12  #ifdef __NR_readdir
      13  
      14  # include <assert.h>
      15  # include <dirent.h>
      16  # include <fcntl.h>
      17  # include <stdio.h>
      18  # include <string.h>
      19  # include <sys/stat.h>
      20  # include <unistd.h>
      21  
      22  static const char fname[] =
      23  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      24  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      25  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      26  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      27  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      28  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      29  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\n"
      30  	"A\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nA\nZ";
      31  static const char qname[] =
      32  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      33  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      34  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      35  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      36  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      37  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      38  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\n"
      39  	"A\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nA\\nZ";
      40  
      41  int
      42  main(void)
      43  {
      44  	static const char dname[] = "readdir.test.tmp.dir";
      45  	struct {
      46  		unsigned long   d_ino;
      47  		unsigned long   d_off;
      48  		unsigned short  d_reclen;
      49  		char d_name[1024];
      50  	} e;
      51  	int rc;
      52  
      53  	assert(!mkdir(dname, 0700));
      54  	assert(!chdir(dname));
      55  	(void) close(0);
      56  	assert(!creat(fname, 0600));
      57  	assert(!close(0));
      58  	assert(!open(".", O_RDONLY | O_DIRECTORY));
      59  	while ((rc = syscall(__NR_readdir, 0, &e, 1))) {
      60  		if (rc < 0)
      61  			perror_msg_and_skip("readdir");
      62  		e.d_name[e.d_reclen] = '\0';
      63  		printf("readdir(0, {d_ino=%lu, d_off=%lu, d_reclen=%u"
      64  		       ", d_name=\"%s\"}) = %d\n",
      65  		       e.d_ino, e.d_off, e.d_reclen,
      66  		       e.d_name[0] == '.' ? e.d_name : qname, rc);
      67  	}
      68  	printf("readdir(0, %p) = 0\n", &e);
      69  	puts("+++ exited with 0 +++");
      70  	assert(!unlink(fname));
      71  	assert(!chdir(".."));
      72  	assert(!rmdir(dname));
      73  
      74  	return 0;
      75  }
      76  
      77  #else
      78  
      79  SKIP_MAIN_UNDEFINED("__NR_readdir")
      80  
      81  #endif