Problem with scandir (3)

Robin Faichney rjf at canon.co.uk
Wed Jun 13 19:47:40 AEST 1990


SunOS 4.0.1c on a SPARCstation 1.

I want the names of rasterfiles in a given directory and scandir seems
ideal, but I can't get it to do it.  Going by debugging statements
(which are omitted here for clarity) however many appropriate files are
found, the list always has only one entry, in which the d_name field is
"\0".

(BTW, I know I should be using dirent -- but this doesn't work with
that either.  I also know that I could do it using a script with file,
grep and awk -- that's what I'm doing at the moment, but I need more
speed and flexibility.)

Thanks in advance.  Have a nice day.  ;-)

Code follows
----
/* findfiles.c -- takes directory name on command line, scans it for
files of the appropriate types (presently only rasterfiles) and
outputs their names */

#include	<stdio.h>
#include	<sys/types.h>
#include	<sys/param.h>
#include	<sys/dir.h>
#include	<rasterfile.h>

#define	MAXNAMES	200

int
approp(d)
struct direct *d;
{
	FILE	*fp;
	int	magic;

	if ((fp = fopen(d->d_name, "r")) == NULL)
	{
		return 0;
	}

	if (fread((char *) &magic, sizeof (magic), 1, fp) != 1)
        {
		close(fp);
                return 0;
        }

	close(fp);

	if (magic != RAS_MAGIC)
        {
                return 0;
        }

	return 1;
}

main(argc, argv)
int	argc;
char	*argv[];
{
	struct direct	*namelist[MAXNAMES];
	int	i;

	if (argc != 2)
	{
		exit(-1);
	}

	if (chdir(argv[1]) == -1)
	{
		exit(-1);
	}

	for (i = 0; i < MAXNAMES; i++)
	{
		namelist[i] = NULL;
	}

	if (scandir(".", namelist, approp, NULL) == -1)
	{
		exit(-1);
	}

	for (i = 0; namelist[i]; i++)
	{
		printf("%s\n", namelist[i]->d_name);
	}
}
-- 
Robin Faichney, Canon Research Centre Europe Ltd,  NRS: rjf at uk.co.canon
17-20 Frederick Sanger Road,                      ARPA: rjf at canon.co.uk
Surrey Research Park, Guildford. GU2 5YD          UUCP: rjf at canon.uucp
Tel (+44)||(0) 483 574325                     Fax (+44)||(0) 483 574360



More information about the Comp.unix.questions mailing list