/*	compile on p9p
 *	9c dirread.c
 *	9c test_dirread.c && 9l -o o.test_dirread test_dirread.o dirread.o
 */

#include <u.h>
#include <libc.h>

#define DBG if(0)

#define fatal sysfatal

void
usage(void)
{
	fprint(2,"usage: %s [-a] dir\n",argv0);
	exits(nil);
}


void
test2(char *dirname,int flag)
{
	int fd;
	Dir *db;
	int i,n;
	fd = open(dirname,OREAD);
	if(fd < 0)
		fatal("%s open error",dirname);
	if(flag){
		n = dirreadall(fd, &db);
		if(n < 0)
			fatal("dirread error");

		for(i = 0; i < n; i++)
			print("%s %s %s %uo %uld\n",\
				 db[i].name, db[i].uid, db[i].gid, db[i].mode,db[i].length);
		//free(db);

	}
	else{
		while((n = dirread(fd, &db)) > 0){
			DBG print("#DBG main: n=%d\n",n);
			for(i = 0; i < n; i++)
				print("%s %s %s %uo %uld\n",\
					db[i].name, db[i].uid, db[i].gid, db[i].mode,db[i].length);
		}
		//free(db);
	}
	close(fd);
}

int aflag;
char *ofile;

void
main(int argc, char *argv[])
{
	char *dirname;
	ARGBEGIN{
        case 'a':
		aflag = 1;
		break;
	case 'o':
		ofile = EARGF(usage());
		break;
	case '?':
	default:
		usage();
	} ARGEND;

	if(ofile)
		print("%s\n", ofile);
	if(argc == 0)
		usage();

	dirname = argv[0];
	test2(dirname,aflag);
	exits(nil);
}
