(linenum→info "unix/slp.c:2238")

glibc/2.7/dirent/tst-seekdir.c

    1: #include <stdio.h>
    2: #include <dirent.h>
    3: #include <stdlib.h>
    4: 
    5: int
    6: main (int argc, char *argv[])
    7: {
    8:   DIR * dirp;
    9:   long int save3 = 0;
   10:   long int cur;
   11:   int i = 0;
   12:   int result = 0;
   13:   struct dirent *dp;
   14:   long int save0;
   15:   long int rewind;
   16: 
   17:   dirp = opendir (".");
   18:   if (dirp == NULL)
   19:     {
   20:       printf ("opendir failed: %m\n");
   21:       return 1;
   22:     }
   23: 
   24:   save0 = telldir (dirp);
   25:   if (save0 == -1)
   26:     {
   27:       printf ("telldir failed: %m\n");
   28:       result = 1;
   29:     }
   30: 
   31:   for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))
   32:     {
   33:       /* save position 3 (after fourth entry) */
   34:       if (i++ == 3)
   35:         save3 = telldir (dirp);
   36: 
   37:       printf ("%s\n", dp->d_name);
   38: 
   39:       /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
   40:          scrambled */
   41:       if (i == 400)
   42:         break;
   43:     }
   44: 
   45:   printf ("going back past 4-th entry...\n");
   46: 
   47:   /* go back to saved entry */
   48:   seekdir (dirp, save3);
   49: 
   50:   /* Check whether telldir equals to save3 now.  */
   51:   cur = telldir (dirp);
   52:   if (cur != save3)
   53:     {
   54:       printf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
   55:       result = 1;
   56:     }
   57: 
   58:   /* print remaining files (3-last) */
   59:   for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))
   60:     printf ("%s\n", dp->d_name);
   61: 
   62:   /* Check rewinddir */
   63:   rewinddir (dirp);
   64:   rewind = telldir (dirp);
   65:   if (rewind == -1)
   66:     {
   67:       printf ("telldir failed: %m\n");
   68:       result = 1;
   69:     }
   70:   else if (save0 != rewind)
   71:     {
   72:       printf ("rewinddir didn't reset directory stream\n");
   73:       result = 1;
   74:     }
   75: 
   76:   closedir (dirp);
   77:   return result;
   78: }
Syntax (Markdown)