Files
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

55 lines
1.3 KiB
C
Executable File

/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#ident "@(#)readdir.c 1.11 93/08/20 SMI" /* SVr4.0 1.11 */
/*
readdir -- C library extension routine
*/
#ifdef __STDC__
#pragma weak readdir = _readdir
#endif
#include "synonyms.h"
#include <sys/types.h>
#include <dirent.h>
extern char *strncpy();
extern int getdents(), strlen();
#define NULL 0
struct dirent *
readdir(dirp)
register DIR *dirp; /* stream from opendir() */
{
register struct dirent *dp; /* -> directory data */
int saveloc = 0;
if (dirp->dd_size != 0) {
dp = (struct dirent *)&dirp->dd_buf[dirp->dd_loc];
saveloc = dirp->dd_loc; /* save for possible EOF */
dirp->dd_loc += dp->d_reclen;
}
if (dirp->dd_loc >= dirp->dd_size)
dirp->dd_loc = dirp->dd_size = 0;
if (dirp->dd_size == 0 /* refill buffer */
&& (dirp->dd_size = getdents(dirp->dd_fd,
(struct dirent *)dirp->dd_buf, DIRBUF)
) <= 0
) {
if (dirp->dd_size == 0) /* This means EOF */
dirp->dd_loc = saveloc; /* EOF so save for telldir */
return NULL; /* error or EOF */
}
dp = (struct dirent *)&dirp->dd_buf[dirp->dd_loc];
return(dp);
}