Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Jul 2003 15:23:53 -0400
From:      Jp Calderone <exarkun@intarweb.us>
To:        hackers@freebsd.org
Subject:   telldir()/seekdir() confusion
Message-ID:  <20030708192342.GA4899@intarweb.us>

next in thread | raw e-mail | index | archive | help
  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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030708192342.GA4899>