lib/repdir.c

ソースコードを見る。

データ構造

struct  dir_buf

関数

void replace_readdir_dummy (void)
SMB_STRUCT_DIR * opendir64 (const char *dname) SMB_STRUCT_DIR *opendir(const char *dname)
SMB_STRUCT_DIRENT * readdir64 (SMB_STRUCT_DIR *dir) SMB_STRUCT_DIRENT *readdir(SMB_STRUCT_DIR *dir)
long telldir64 (SMB_STRUCT_DIR *dir) long telldir(SMB_STRUCT_DIR *dir)
void seekdir64 (SMB_STRUCT_DIR *dir, long ofs) void seekdir(SMB_STRUCT_DIR *dir


関数

void replace_readdir_dummy ( void   ) 

repdir.c50 行で定義されています。

00050 {}

SMB_STRUCT_DIR* opendir64 ( const char *  dname  )  const

repdir.c71 行で定義されています。

参照先 errno.

参照元 sys_opendir().

00075 {
00076         struct dir_buf *d;
00077         d = malloc(sizeof(*d));
00078         if (d == NULL) {
00079                 errno = ENOMEM;
00080                 return NULL;
00081         }
00082 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OPEN64)
00083         d->fd = open64(dname, O_RDONLY);
00084 #else
00085         d->fd = open(dname, O_RDONLY);
00086 #endif
00087 
00088         if (d->fd == -1) {
00089                 free(d);
00090                 return NULL;
00091         }
00092         d->ofs = 0;
00093         d->seekpos = 0;
00094         d->nbytes = 0;
00095         return (SMB_STRUCT_DIR *)d;
00096 }

SMB_STRUCT_DIRENT* readdir64 ( SMB_STRUCT_DIR *  dir  ) 

repdir.c99 行で定義されています。

参照先 dir_buf::bufdir_buf::fddir_buf::nbytesdir_buf::ofsdir_buf::seekpos.

参照元 sys_readdir().

00103 {
00104         struct dir_buf *d = (struct dir_buf *)dir;
00105         SMB_STRUCT_DIRENT *de;
00106 
00107         if (d->ofs >= d->nbytes) {
00108 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_LSEEK64)
00109                 d->seekpos = lseek64(d->fd, 0, SEEK_CUR);
00110 #else
00111                 d->seekpos = lseek(d->fd, 0, SEEK_CUR);
00112 #endif
00113 
00114 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_GETDENTS64)
00115                 d->nbytes = getdents64(d->fd, d->buf, DIR_BUF_SIZE);
00116 #else
00117                 d->nbytes = getdents(d->fd, d->buf, DIR_BUF_SIZE);
00118 #endif
00119                 d->ofs = 0;
00120         }
00121         if (d->ofs >= d->nbytes) {
00122                 return NULL;
00123         }
00124         de = (SMB_STRUCT_DIRENT *)&d->buf[d->ofs];
00125         d->ofs += de->d_reclen;
00126         return de;
00127 }

long telldir64 ( SMB_STRUCT_DIR *  dir  ) 

repdir.c130 行で定義されています。

参照先 dir_buf::fddir_buf::nbytesdir_buf::ofsdir_buf::seekpos.

参照元 sys_telldir().

00134 {
00135         struct dir_buf *d = (struct dir_buf *)dir;
00136         if (d->ofs >= d->nbytes) {
00137 #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_LSEEK64)
00138                 d->seekpos = lseek64(d->fd, 0, SEEK_CUR);
00139 #else
00140                 d->seekpos = lseek(d->fd, 0, SEEK_CUR);
00141 #endif
00142                 d->ofs = 0;
00143                 d->nbytes = 0;
00144         }
00145         /* this relies on seekpos always being a multiple of
00146            DIR_BUF_SIZE. Is that always true on BSD systems? */
00147         if (d->seekpos & (DIR_BUF_SIZE-1)) {
00148                 abort();
00149         }
00150         return d->seekpos + d->ofs;
00151 }

void seekdir64 ( SMB_STRUCT_DIR *  dir,
long  ofs 
)

参照元 sys_seekdir().


Sambaに対してSat Aug 29 21:23:36 2009に生成されました。  doxygen 1.4.7