telldir()/seekdir() confusion

Jp Calderone exarkun at intarweb.us
Tue Jul 8 12:23:57 PDT 2003


  I'm trying to work out some inconsistent behavior in my app across
platforms.  On FreeBSD, seekdir() doesn't seem to behave as I expect it to. 
Here's a short program that demonstrates my confusion:

#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>

int main() {
    DIR* dirp;
    off_t pos;
    struct dirent* ent;

    dirp = opendir(".");
    if (!dirp)
        perror("opendir");

    ent = readdir(dirp);
    if (!ent)
        perror("readdir");

    pos = telldir(dirp);
    if (pos == -1)
        perror("telldir");

    ent = readdir(dirp);
    if (!ent)
        perror("readdir 2");

    seekdir(dirp, pos);

    printf("First telldir:%d\nSecond telldir:%d\n", pos, telldir(dirp));

    return 0;
}

  On other platforms, the first and second telldir() return the same value. 
On the two FreeBSD machines I've tried it on, the first telldir() returns 1
and the second returns 0.

  Can anyone explain this?

  Thanks in advance,

  Jp


More information about the freebsd-hackers mailing list