Blame dirent/tst-seekdir.c

Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <dirent.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
Packit 6c4009
static int
Packit 6c4009
do_test (void)
Packit 6c4009
{
Packit 6c4009
  DIR * dirp;
Packit 6c4009
  long int save3 = 0;
Packit 6c4009
  long int cur;
Packit 6c4009
  int i = 0;
Packit 6c4009
  int result = 0;
Packit 6c4009
  struct dirent *dp;
Packit 6c4009
  long int save0;
Packit 6c4009
  long int rewind;
Packit 6c4009
Packit 6c4009
  dirp = opendir (".");
Packit 6c4009
  if (dirp == NULL)
Packit 6c4009
    {
Packit 6c4009
      printf ("opendir failed: %m\n");
Packit 6c4009
      return 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  save0 = telldir (dirp);
Packit 6c4009
  if (save0 == -1)
Packit 6c4009
    {
Packit 6c4009
      printf ("telldir failed: %m\n");
Packit 6c4009
      result = 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))
Packit 6c4009
    {
Packit 6c4009
      /* save position 3 (after fourth entry) */
Packit 6c4009
      if (i++ == 3)
Packit 6c4009
	save3 = telldir (dirp);
Packit 6c4009
Packit 6c4009
      printf ("%s\n", dp->d_name);
Packit 6c4009
Packit 6c4009
      /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
Packit 6c4009
	 scrambled */
Packit 6c4009
      if (i == 400)
Packit 6c4009
	break;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  printf ("going back past 4-th entry...\n");
Packit 6c4009
Packit 6c4009
  /* go back to saved entry */
Packit 6c4009
  seekdir (dirp, save3);
Packit 6c4009
Packit 6c4009
  /* Check whether telldir equals to save3 now.  */
Packit 6c4009
  cur = telldir (dirp);
Packit 6c4009
  if (cur != save3)
Packit 6c4009
    {
Packit 6c4009
      printf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
Packit 6c4009
      result = 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  /* print remaining files (3-last) */
Packit 6c4009
  for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))
Packit 6c4009
    printf ("%s\n", dp->d_name);
Packit 6c4009
Packit 6c4009
  /* Check rewinddir */
Packit 6c4009
  rewinddir (dirp);
Packit 6c4009
  rewind = telldir (dirp);
Packit 6c4009
  if (rewind == -1)
Packit 6c4009
    {
Packit 6c4009
      printf ("telldir failed: %m\n");
Packit 6c4009
      result = 1;
Packit 6c4009
    }
Packit 6c4009
  else if (save0 != rewind)
Packit 6c4009
    {
Packit 6c4009
      printf ("rewinddir didn't reset directory stream\n");
Packit 6c4009
      result = 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  closedir (dirp);
Packit 6c4009
  return result;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#define TEST_FUNCTION do_test ()
Packit 6c4009
#include "../test-skeleton.c"