データ構造 | |
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 |
SMB_STRUCT_DIR* opendir64 | ( | const char * | dname | ) | const |
参照先 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 | ) |
参照先 dir_buf::buf・dir_buf::fd・dir_buf::nbytes・dir_buf::ofs・dir_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 | ) |
参照先 dir_buf::fd・dir_buf::nbytes・dir_buf::ofs・dir_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().