Date: Wed, 12 Apr 1995 09:48:27 -0400 (EDT) From: Craig Yap <craig@munich.gcomm.com> To: bugs@FreeBSD.org Subject: seekdir bug Message-ID: <199504121348.JAA27823@munich.gcomm.com>
index | next in thread | raw e-mail
There is a bug when seeking through a directory. telldir() seems to return
a position in the directory that doesnt match the name of the file. I've
included a program that will exploit the bug. I ran it as followed:
First made some test files:
touch 1 2 3 4
then ran the program:
./a "?"
I will continually show the name=a eventhough the position is incremented
Thanks for your time,
Craig
/*
* test the viability of seekdir() after closedir()
*
* requires: fnmatch() and dirent routines
*/
#include <dirent.h>
#include <fnmatch.h>
static long position=-1;
char *
findfile(char *spec)
{
struct dirent *dent;
DIR *dirp;
if ((dirp=opendir(".")) == NULL) {
perror("opendir");
exit(2);
}
if (position != -1) {
seekdir(dirp,position);
}
while((dent=readdir(dirp)) != NULL) {
if (fnmatch(spec,dent->d_name,0) == 0 &&
strcmp(dent->d_name,".") != 0 &&
strcmp(dent->d_name,"..") != 0) {
position=telldir(dirp);
closedir(dirp);
return(dent->d_name);
}
}
closedir(dirp);
return(NULL);
}
main(
int argc,
char *argv[])
{
char *fname;
if (argc != 2) {
printf("usage: testdirent \"<filespec>\"\n");
return(1);
}
while ((fname=findfile(argv[1])) != NULL) {
printf("name=%s position=%ld\n",fname,position);
}
return(0);
}
--
------------------------------------------------------------------------------
Craig Yap craig@munich.gcomm.com
Software Engineer
Unix Technical Division
Galacticomm, Inc
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199504121348.JAA27823>
