| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | #include <stdio.h>#include <string.h>#include <errno.h>#include <dirent.h>#include <stdlib.h>intmain (int argc, char *argv[]){  DIR * dirp;  long int save3 = 0;  long int cur;  int i = 0;  int result = 0;  struct dirent *dp;  off_t save0, rewind_ret;  dirp = opendir (".");  if (dirp == NULL)    {      printf ("opendir failed: %s\n", strerror(errno));      return 1;    }  save0 = telldir (dirp);  if (save0 == -1)    {      printf ("telldir failed: %s\n", strerror(errno));      result = 1;    }  for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))    {      /* save position 3 (after fourth entry) */      if (i++ == 3)	save3 = telldir (dirp);      printf ("%s\n", dp->d_name);      /* stop at 400 (just to make sure dirp->__offset and dirp->__size are	 scrambled */      if (i == 400)	break;    }  printf ("going back past 4-th entry...\n");  /* go back to saved entry */  seekdir (dirp, save3);  /* Check whether telldir equals to save3 now.  */  cur = telldir (dirp);  if (cur != save3)    {      printf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);      result = 1;    }  /* print remaining files (3-last) */  for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))    printf ("%s\n", dp->d_name);  /* Check rewinddir */  rewinddir (dirp);  rewind_ret = telldir (dirp);  if (rewind_ret == -1)    {      printf ("telldir failed: %s\n", strerror(errno));      result = 1;    }  else if (save0 != rewind_ret)    {      printf ("rewinddir didn't reset directory stream\n");      result = 1;    }  closedir (dirp);  return result;}
 |